web-dev-qa-db-ja.com

「Given / When / Then」がサポートされていないのに、なぜJasmineは「BDD」テストフレームワークと呼ばれるのですか?

Jasmine の紹介では、次のように述べています。

Jasmineは、JavaScriptコードをテストするためのビヘイビア駆動開発フレームワークです。

私はBDDのいくつかの記事を読みましたが、「Given/When/Then」を使用して「シナリオ」を定義する必要があるようです。これは、「キュウリ」が行うことです。しかし、ジャスミンでは、そのような方法は見当たりません。

そのような概念がなくても、ジャス​​ミンを「BDD」テストフレームワークと呼ぶことはできますか?

16
Freewind

Jasmineは、動作を説明する仕様として「テスト」をより多く記述できるように、多くの構文糖衣を含むjavascriptの単体テストフレームワークとして説明します。ほとんどの場合、Given、When、Thenを使用して、ビジネスの言語でシステムの全体的な動作を記述/指定します。システムのコンポーネントを説明する場合、自然言語を使用しても一般的にメリットは少なくなります。より低いレベルの抽象化で必要とされる詳細は、プログラミング言語によってより適切にサポートされます。

現在、単体テストはBDDの基本的な部分であり、ジャスミンは動作をかなり雄弁に指定できるようにこれをサポートしているため、低レベルの抽象化のみを対象としている場合でも、間違いなくBDDテストツール/フレームワークになる可能性があります。

キュウリは、より高いレベルの抽象化のみを対象としています。低レベルの仕様を書くことに熱心であるという事実は、それをBDDテストフレームワーク(BDDコラボレーションツール)にすることにはなりません。

興味深い点は、BDDを実行するには、2つの異なるテストツールが本当に必要なことです。1つは高レベルの抽象化を実行し、もう1つは低レベルの詳細な仕様を実行します。両方とも同じプロセスの一部であるさまざまなタスクのためのさまざまなツール。

最後に、GWTは実際にはシナリオ作成の実装の詳細にすぎません。その差別化の方法

  • 状態Gの設定
  • アクションを説明するW
  • アクションTの結果を調べる
15
diabolist

Jasmineは、given-when-thenの使用を妨げるものではありません。以下は、Jasmineの使用中にgiven-when-thenを使用できる2つの方法を示す例です。

describe("Given a string containing 'foo'", function(){
    var someString;
    beforeEach(function() {
        someString = "foo";
    });
    describe("When I append 'bar'", function(){
        beforeEach(function() {
            someString += "bar";
        });
        it("Then the string is 'foobar'", function(){
            expect(someString).toBe("foobar");
        });
    });
    it("When I append 'baz' Then the string is 'foobaz'", function(){
        someString += "baz";
        expect(someString).toBe("foobaz");
    });
});

自分に合ったスタイルを見つけましょう。テストの説明に、テスト対象を効果的に説明していることを確認する必要があります。与えられたときのスタイルの文をツールとして使用して、テストの説明がテスト対象について正確であることを確認できます。

20
areve

@PDHideの質問に答えるには:ジャスミンでは許可されています。

こんにちは、ネストされた記述をどのように使用できますか? Jasminによると、describeはテストスイート用であり、テストケース用です。

ドキュメント 言う:

ネスティング記述ブロック

describeの呼び出しはネストでき、仕様は任意のレベルで定義されます。これにより、スイートを関数のツリーとして構成できます。スペックが実行される前に、Jasmineはツリーを下って各beforeEach関数を順番に実行します。仕様が実行された後、Jasmineは同様にafterEach関数をウォークスルーします。

また言う:

describe関数は、関連する仕様をグループ化するためのものです[...]

1
serv-inc