Javascript 为什么茉莉被称为“a”;BDD";测试框架,即使没有“;给定/何时/然后“;支持?

Javascript 为什么茉莉被称为“a”;BDD";测试框架,即使没有“;给定/何时/然后“;支持?,javascript,jasmine,cucumber,bdd,Javascript,Jasmine,Cucumber,Bdd,在介绍中,它说: Jasmine是一个用于测试JavaScript代码的行为驱动开发框架 我读了BDD的几篇文章,似乎我们应该使用'Given/When/Then'来定义“场景”,这就是“cumber”所做的。但在《茉莉花》中,我看不到任何这样的方法 即使Jasmine没有这样的概念,我们仍然可以称它为“BDD”测试框架吗?我将Jasmine描述为javascript的单元测试框架,它具有大量的语法糖分,因此我们可以将“测试”更多地描述为描述行为的规范。当我们用业务语言描述/指定系统的整体行为时

在介绍中,它说:

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

我读了BDD的几篇文章,似乎我们应该使用'Given/When/Then'来定义“场景”,这就是“cumber”所做的。但在《茉莉花》中,我看不到任何这样的方法


即使Jasmine没有这样的概念,我们仍然可以称它为“BDD”测试框架吗?

我将Jasmine描述为javascript的单元测试框架,它具有大量的语法糖分,因此我们可以将“测试”更多地描述为描述行为的规范。当我们用业务语言描述/指定系统的整体行为时,我们通常使用给定、何时、然后。当您描述系统的一个组件时,使用自然语言的好处通常较少——编程语言更好地支持较低抽象级别所需的更多细节

现在,单元测试是BDD的一个基本部分,jasmine以一种允许我们相当雄辩地指定行为的方式支持这一点,因此,是的,它肯定可以成为BDD测试工具/框架,即使它只针对较低级别的抽象

Cucumber只针对更高层次的抽象。事实上,它在编写低级规范方面的能力并没有使它成为一个BDD测试框架(BDD协作工具)

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

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

  • 设置状态G
  • 描述动作W
  • 审查行动的后果

茉莉花不会阻止您在使用given时使用given,下面是一个示例,展示了您在使用Jasmine时可以使用given的两种方法

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样式句子作为工具,以确保您的测试描述准确无误地描述测试内容。

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


您好,您如何使用嵌套描述?根据Jasmin的说法,description用于测试套件,而it用于测试用例

说:

嵌套描述块 对
descripe
的调用可以嵌套,并在任何级别定义规范。这使得套件可以组成一个功能树。在执行规范之前,Jasmine会沿着树走下去,依次执行每个
beforeach
函数。在执行规范之后,Jasmine在每个函数之后以类似方式遍历

政府还说:

descripe
功能用于对相关规范进行分组[…]


谢谢你的精彩回答,对不起我的英语,我不能很好地理解这句话
事实上,它在编写低级规范方面的长裤并没有使它成为一个BDD测试框架,你能用一个更简单的表达吗?对不起,这句话的意思是,cucumber不擅长驱动BDD生命周期的一部分(做低级测试的TDD部分),但这并不意味着它不是一个好的BDD工具。同样的标准也适用于茉莉花。它可能不擅长Cucumber擅长做的事情,但它非常擅长做底层工作,同时支持BDD的一个关键思想,即指定而不是测试。但是BDD不是从测试开始编码,所以你先编写测试,然后测试失败,然后你再编写代码吗?我想Jasmine可以在编码后用于测试,对吗?@Tester您也可以在编码后使用任何框架(BDD或TDD)进行测试,只需针对代码调用工具即可。虽然TDD专注于何时进行测试,BDD更多的是关于如何测试。我一直使用这种风格,大多数BDD框架在对描述及其缩进进行分组方面做得很好。`PASS ui/tests/reducers/drawerreducer.spec.js在抽屉关闭且动作类型为TOGGLE\u drawer的情况下切换导航抽屉✓ 它应将抽屉状态isOpen切换为真(2ms)✓ 如果当前状态未通过,则应将抽屉状态isOpen切换为true(2ms),前提是抽屉已关闭且动作类型为not ToggleU drawer✓ 它应该返回当前状态为“嗨,你怎么能使用嵌套描述?”?正如Jasmin所说,description用于测试套件,而it用于测试用例。