我无法让这两个规范文件相互配合。我并不认为spec文件会影响其他spec文件,但在这种情况下它看起来像是这样,对我来说毫无意义。
我使用 Jasmine 和 Karma ,测试通过 Gulp 自动执行 我得到的错误是 "未知提供商:ProductServiceProvider< - ProductService"
我已经更改了测试以解决问题,这里是简单的版本。
如果我注释掉文件2中的以下行,则两个文件都会通过。
angular.module('eu.product.service', []);
这与模拟模块有关,但我无法弄清楚我在这里做错了什么。
spec file 1
describe('Testing euProduct', function(){
var $factory;
var $httpBackend;
beforeEach(function () {
//modules
module('eu.product.service');
//injections
inject(function($injector){
$factory = $injector.get('ProductService');
$httpBackend = $injector.get('$httpBackend');
});
//mock data
$httpBackend.when('GET', '/Mercury/product/list/0/0?PrimaryCategoryID=0&pageSize=20&startPage=1').respond({
"data":
[{
"recallid":45,
}]
});
});
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
//-----Tests----
it('Should be able to get data from the server on default parameters.', function(){
$factory.list({},function(data){
expect(data.data[0].recallid).toBe(45);
});
$httpBackend.flush();
});
});
规范文件2
'use strict';
描述('测试euProduct Logic',function(){
//variables in closure scope so they can be used in tested but set with injection in beforeEach
var $factory;
//mocking a module :: http://www.sitepoint.com/mocking-dependencies-angularjs-tests/
beforeEach(function () {
angular.module('eu.product.service',[]);
module(function($provide) {
$provide.factory('ProductService', function() {
// Mocking utilSvc
return {
list : function(para, callback){
callback({
data : {
product : 'The product Name'
}
})
}
};
});
$provide.service('storageSvc', function() {
// Mocking storageSvc
});
});
//modules
module('eu.product.logic');
//injections
inject(function($injector){
$factory = $injector.get('ProductLogic');
});
});
//-----Tests----
it('Should be able to run tests', function(){
expect(2).toBe(2);
});
});
答案 0 :(得分:1)
来自module
的{{1}}和inject
都返回需要调用的函数。
在以下示例中,我进行了以下更改:
angular-mocks
- 前缀变量。这些是由angular保留的。$
代替inject
注入。添加一些注释以供进一步说明。
$injector