我开始使用 Jasmine 来测试 angularjs,但很快我开始想知道哪种方法是好的,为什么?我选择了每个规范的单一期望。我喜欢它,因为非技术人员可以更好地理解它,嗯,这就是 BDD 的重点,不是吗?例如
describe('Testing multple expect per spec My Service', function() {
beforeEach(/* some stuff*/);
it('test part ',function(){
expect('part 1').toBe('part one'); //
expect('part 2').toBe('part two'); // some crazy stuff, just for example
}
}
describe('Testing single expect per spec My Service', function() {
beforeEach(/* some stuff*/);
it('test part one ',function(){
expect('part 1').toBe('part one'); // just for example
}
it('test part two ',function(){
expect('part 2').toBe('part two'); // just for example
}
}
Run Code Online (Sandbox Code Playgroud)
但很快就遇到了麻烦,我意识到 beforeEach 实际上是在重置/创建我的服务的一个新对象(上面的例子中没有显示),因此封装的行为没有正确反映。
例如,我正在测试一个注入服务的 firstMethod() 部分,它改变了服务的数据结构,“测试第一部分”,然后在第二个规范中,我正在测试 secondMethod() ,它在'测试第二部分'。但是由于 beforeEach 重新注入我的服务,“测试第二部分”失败了。我怎样才能解决这种情况?
请在这里帮助茉莉花新手。
你的单元测试应该相互独立。否则,如果测试 2 失败,您不知道方法 2 中是否存在问题,或者方法 1 中完成的设置是否存在问题。
为了处理这种情况,您可以在测试 2 开始时进行一些额外的设置,确保服务处于测试方法 2 中的逻辑所需的任何状态。如果多个测试需要该设置,您可以将其放入一个嵌套的describe和beforeEach。
正如@ktharsis 指出的那样,只要每个规范验证相同的“行为”,就可以对每个规范进行多个期望。每个测试都应该对应一种行为,而不一定是一种断言。
| 归档时间: |
|
| 查看次数: |
2440 次 |
| 最近记录: |