我开始使用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
}
}
但很快遇到麻烦,我意识到beforeEach实际上正在重新设置/创建我的服务的新对象(上面的示例中没有显示),因此封装的行为没有正确反映。
例如,我正在测试注入服务的firstMethod()部分,它改变了服务的数据结构,'测试第一部分',然后在第二个规范中我测试了测试变化数据的secondMethod() “测试第二部分”中的结构。但是由于beforeEach重新注入我的服务,'测试第二部分'失败了。我怎样才能解决这种情况?
请在这里帮助Jasmine新手。
答案 0 :(得分:3)
您的单元测试应该相互独立。否则,如果测试2失败,您就不知道方法2中是否存在问题,或者方法1中的设置是否存在问题。
要处理这种情况,您可以在测试2开始时进行一些额外的设置,确保服务处于任何必要的状态,以便测试方法2中的逻辑。如果多个测试需要该设置,您可以将它放在嵌套的describe
和beforeEach
。
正如@ktharsis指出的那样,只要他们验证相同的"行为",每个规格的多个预期都很好。每个测试应该对应一个行为,不一定是一个断言。