在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
功能用于对相关规范进行分组〔…〕