我对单元测试很陌生。我正在编写代码。我的js文件有:
app.service("appService", function($http) {
this.getData = function(url) {
return $http.get(url);
}
this.foo = function() {
console.log("Hello foo function");
}
})
app.controller("productsController", ['$scope', '$http', 'appService',
function($scope, $http, appService) {
var pct = this;
console.log("This is products controller");
pct.url = "http://mysafeinfo.com/api/data?list=englishmonarchs&format=json";
var jsonDataPromise = appService.getData(pct.url);
jsonDataPromise
.then(function(response) {
pct.jsonData = response.data;
}, function(err) {
console.log("Error is: " + error);
});
}
]);
我使用jasmine框架在karma.js中进行单元测试。我把testfile.js改为:
describe('unitTesting', function() {
var $prodScope, prodCtrl, mockService;
beforeEach(module('sampleApp')); //Name of angular module
var jsonData = {
"name": "test_name",
"email": "test_email"
};
beforeEach(function() {
mockService = jasmine.createSpyObj('appService', ['getData', 'foo']);
})
beforeEach(inject(function($controller, $rootScope, $httpBackend, $http, $q, mockService) {
defer = $q.defer();
$prodScope = $rootScope.$new();
prodCtrl = $controller('productsController', {
$scope: $prodScope,
$http: $http,
appService: mockService
});
spyOn(mockService, "getData").and.callFake(function() {
return defer.promise;
});
spyOn(mockService, "foo");
}));
//Here unit tests go
})
我的问题是,当我使用karma start(我有karma.conf.js)运行测试时,我收到错误:
[$ injector:unpr]未知提供者:mockServiceProvider< - mockService。
任何人都可以向我解释为什么我收到此错误?请解释一下正确的代码是什么。
答案 0 :(得分:0)
您正在使用Pack p = new Pack("cards.txt");
p.cards[0].getName();
注入内部使用角度的DI系统的服务。对于这个用例,它正在寻找角度的DI系统中的mockService,它并不存在。
从inject()
参数中删除mockService并从当前所在的inject()
范围使用它,或者使用提供程序describe
服务,以便在需要测试的内容时提供mockService。例如
$provide
答案 1 :(得分:0)
这是因为你试图在mockService
注射中注射beforeEach
。
这
beforeEach(inject(function(
$controller,
$rootScope,
$httpBackend,
$http,
$q,
mockService // REMOVE THIS!
) {
// ....
}));
要
beforeEach(inject(function(
$controller,
$rootScope,
$httpBackend,
$http,
$q
) {
// ....
}));