在Jasmine中使用循环(带注入服务)

时间:2016-09-16 14:52:17

标签: angularjs jasmine

我正在使用if which vagrant > /dev/null 2>&1; then echo "This is most likely the host" fi
在此之后:http://tosbourn.com/using-loops-in-jasmine/我直接在&{39; jasmine 2.3.'中放置了一个FOR循环。嵌套函数

describe

问题在于' describe('service Profile', function() { var ProfileService; beforeEach(function() { module('app.services.profile'); inject(function(_ProfileService_) { ProfileService = _ProfileService_; }); }); describe('method setProfile', function() { function setProfileTest(key) { it('should set the object profile', function() { expect(ProfileService.profile[key]).toBeUndefined(); }); } for (var key in ProfileService.profile) { if (ProfileService.profile.hasOwnProperty(key)) { setProfileTest(key); } } }); }); '功能,it仍为ProfileService

2 个答案:

答案 0 :(得分:1)

由于您需要注入ProfileService,因此循环必须在beforeEach块之后运行。

我可以看到两种解决方案。要么:

使用硬编码的配置文件列表并迭代它们。例如 - 而不是

 for (var key in ProfileService.profile) {

for (var key in ['profile1', 'profile2'...) {

或从外部文件加载配置文件。

OR

将for循环放在it测试中:

it('should set the object profile', function() {
  for (var key in ProfileService.profile) {
    if (ProfileService.profile.hasOwnProperty(key)) {
      expect(ProfileService.profile[key]).toBeUndefined();
    }
  }
});

答案 1 :(得分:0)

describe块创建it块,然后beforeEach运行,然后阻塞,所以,是的,ProfileService将不会在描述时定义如果您在it中定义,则会设置beforeEach块。但是,beforeEach并不是唯一可以使用inject的地方。如果您尝试以下内容会发生什么:

describe('method setProfile',
    inject(
        function(ProfileService) {
             //your code here
        }
    )
)