为什么 Jasmine 被称为"BDD"测试框架,即使不支持"Given/When/Then"?



在Jasmine的介绍中,它说:

Jasmine是一个用于测试JavaScript代码的行为驱动的开发框架。

我读了BDD的几篇文章,似乎我们应该使用"Given/Whin/Then"来定义"Scenario",这就是"cucumber"的作用。但在《茉莉花》中,我看不到任何这样的方法。

即使Jasmine没有这样的概念,我们还能称它为"BDD"测试框架吗?

Jasmine不会阻止您使用givingwhen-then,下面的示例显示了在使用Jasmine时可以使用givingWhen-then的两种方法。

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");
    });
});

找到一种适合你的风格。您应该确保测试描述有效地描述了您正在测试的内容。你可以使用给定的when-then风格的句子作为一种工具,以确保你的测试描述对正在测试的内容是准确的。

我将Jasmine描述为javascript的单元测试框架,它有很多语法糖,这样我们就可以将我们的"测试"更多地写成描述行为的规范。大多数情况下,当我们用业务语言描述/指定系统的整体行为时,我们会使用Given、When、Then。当你描述系统的一个组件时,使用自然语言通常没有什么好处——在较低的抽象级别上需要更多的细节,编程语言就能更好地支持。

现在单元测试是BDD的一个基本部分,jasmine支持这一点,使我们能够非常雄辩地指定行为,所以是的,它绝对可以成为BDD测试工具/框架,即使它只针对较低级别的抽象。

Cucumber只针对更高层次的抽象。事实上,它擅长编写低级别规范,这并没有使它成为BDD测试框架(BDD协作工具)。

有趣的一点是,要进行BDD,您确实需要两种不同的测试工具,一种用于高级抽象,另一种用于较低级别的详细规范。针对同一流程中的不同任务的不同工具。

最后,GWT实际上只是编写场景的一个实现细节。这是区分的一种方法

  • 设置状态G
  • 描述动作W
  • 检查动作T的后果

回答@PDHide的问题:Jasmine中允许这样做。

嗨,你怎么能用嵌套描述?根据Jasmin,description用于测试套件,用于测试用例

医生说:

嵌套描述块

describe的调用可以嵌套,并在任何级别定义规范。这允许将一个套件组成一个函数树。在执行规范之前,Jasmine会在树上按顺序执行每个beforeEach函数。在执行规范之后,Jasmine类似地遍历afterEach函数。

也说:

describe功能用于对相关规范进行分组〔…〕

最新更新