angularjs - Jasmine 根据规范的多期望与根据规范的单期望

标签 angularjs jasmine

我开始使用 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 实际上正在重置/创建我的服务的新对象(上面的示例中未显示),因此封装的行为没有正确反射(reflect)。

例如,我正在测试注入(inject)服务的firstMethod()部分,它更改服务的数据结构“测试第一部分”,然后在第二个规范中我正在测试第二个方法(),它测试更改数据“测试第二部分”中的结构。但由于 beforeEach 重新注入(inject)了我的服务,“测试第二部分”失败了。我该如何解决这种情况?

请帮助 Jasmine 新手。

最佳答案

您的单元测试应该彼此独立。否则,如果测试2失败,你就不知道是方法2有问题,还是方法1中的设置有问题。

要处理这种情况,您可以在测试 2 开始时进行一些额外的设置,确保服务处于测试方法 2 中的逻辑所需的任何状态。如果多个测试需要该设置,您可以将其放入嵌套的 describebeforeEach 中。

正如 @ktharsis 指出的那样,只要验证相同的“行为”,每个规范的多个期望就可以。每个测试应该对应一种行为,而不一定是一个断言。

关于angularjs - Jasmine 根据规范的多期望与根据规范的单期望,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31996124/

相关文章:

angularjs - Angular JS - 使用 Karma/Jasmine 测试带有页面重定向的函数

Angular 2 : How to test that an NgBootstrap component (and contents) are on the page?

javascript - 如何使用 Protractor/Selenium 设置可用于我的测试套件的常用函数?

angularjs - 如何使用 Jasmine 测试指令中的 'ng-click' 事件

angularjs - 如何从 uib-datepicker 编辑 datepicker/day.html

javascript - AngularJs:ng-class 不适用于 ui-select 的 ui-select-choices

angularjs - Golang、cors 和 angularjs - 缺少 header

javascript - 设置 Angular JS 奇怪的错误 angularjs :12416

angularjs - 如何修改 ui.bootstrap.dropdown 以响应鼠标悬停在下拉按钮上?

angularjs - 如何使用 Jasmine 和 Karma 模拟 angularjs $window.sessionStorage