2015-10-05 60 views
0

我正在尝试使用Karma执行单元测试。根据文档,我已经完成了所有工作。当我编写测试的这部分后,它从不会调用最后两个函数。单元测试与Karma不调用函数

it('should create the mock object', function (done) { 

    service.createObj(mockObj) 
     .then(test) 
     .catch(failTest) 
     .finally(done); 
}); 
var test = function() { 
    expect(2).toEqual(1); 
}; 

var failTest = function(error) { 
    expect(2).toEqual(1); 
}; 
+0

在控制台中的任何错误? –

回答

1

尝试注入您的beforeEach函数rootScope。例如像这样:

var rootScope; 

beforeEach(inject(function (_$rootScope_) { 
    rootScope = _$rootScope_.$new(); 
    //other injections 
})); 

和未来调用$消化()服务方法之后:

it('should create the mock object', function (done) { 
    service.createObj(mockObj) 
     .then(test) 
     .catch(failTest) 
     .finally(done); 

    rootScope.$digest(); 
}); 
+0

为什么他应该调用rootScope。$ digest(); !?没有必要为此(并且不需要注入$ rootScope)来测试数据服务,只需使用$ httpBackend来模拟您的服务器返回,就有很多描述如何测试服务对象的答案。 –

+0

它使用了建议的解决方案。我试图通过使用$ httpBackend,但它不会工作。 – Kratos

+0

几个月前我有同样的问题,这个解决方案解决了我的问题。我不知道为什么,但在单元测试中,Angular不会自动激发promiess,需要通过调用rootScope来获得帮助。$ digest()。 –

0
  • 安装角嘲笑模块。
  • 在beforeEach中注入带有模块的模块。
  • 在beforeEach中注入带注入功能的服务。
  • 使用$ httpBackend模拟您的服务器。
  • 不要忘了,让它同步。与$ http.flush()。
相关问题