![](/img/trans.png)
[英]TypeError: navbarUserInfoComponent[0] is undefined in Jasmine test
[英]AngularJS Jasmine test: TypeError: 'undefined' is not an object
Angular的新手 ,以及我先前從angularjs茉莉花測試發布的后續文章:找不到變量vm我的角度測試中遇到TypeError,不確定是什么問題。 這是我的測試:
(function(){
'use strict';
describe('Testing DeliveriesController', function() {
beforeEach(module('app.deliveries'));
describe('Testing deliveries controller', function(){
var vm, controller;
beforeEach(inject(function($controller, $rootScope){
vm = $rootScope.$new();
controller = $controller('DeliveriesController', {$scope:vm});
}));
afterEach(function() {
vm = undefined;
controller = undefined;
});
describe('priorities length', function(){
it('it should test priority length', function () {
expect(vm.priorities.length).toBe(0);
});
});
});
});
})();
我得到的錯誤如下:
PhantomJS 1.9.8 (Mac OS X 0.0.0) Testing DeliveriesController Testing deliveries controller priorities length it should test priority length FAILED
Error: [$injector:unpr] Unknown provider: DeliveriesServiceProvider <- DeliveriesService <- DeliveriesController
http://errors.angularjs.org/1.3.20/$injector/unpr?p0=DeliveriesServiceProvider%20%3C-%20DeliveriesService%20%3C-%20DeliveriesController
at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4031
at getService (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4178)
at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4036
at getService (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4178)
at invoke (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4210)
at instantiate (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4227)
at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:8524
at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular-mocks/angular-mocks.js:1916
at /Users/rgoti/ingestion/external-ingestion/app/public/src/app/deliveries/deliveries.spec.js:12
at invoke (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4219)
at workFn (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular-mocks/angular-mocks.js:2475)
undefined
TypeError: 'undefined' is not an object (evaluating 'vm.priorities.length')
at /Users/rgoti/ingestion/external-ingestion/app/public/src/app/deliveries/deliveries.spec.js:23
禮貌:@StubbbOrn發表評論:
您能顯示控制器的代碼嗎? 這將有助於更好地理解問題。 看起來DeliveriesController不僅取決於$ scope,而且取決於DeliveriesService。 實例化控制器時,應提供所有依賴項(真實的或模擬的)。
這個解決方案對我有用,就是解決方案。 謝謝@StubbOrn
看起來您正在控制器中使用DeliveriesService
。
無論何時使用服務,都需要確保注入該服務或使用$ provider添加它。
beforeEach(inject(function($controller, $rootScope, _DeliveriesService_){
vm = $rootScope.$new();
DeliveriesSrvc = _DeliveriesService_;
controller = $controller('DeliveriesController', {$scope:vm});
}));
要么
beforeEach(module(function ($provide) {
mockObj = {
functionName: jasmine.createSpy('functionName')
}
$provide.value('DeliveriesService',mockObj)
}));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.