我目前正在尝试测试view1(home.js),并在view1中使用从view1_test.js移动到app.js级别的过滤器和指令。我所有的测试都通过了,现在任何引用过滤器或指令的东西现在都不能通过测试。我想知道是否需要创建一个app_test.js还是有办法修复测试仍然工作?以下是我正在谈论的一个例子。角度测试未知提供者
app.js
'use strict';
// Declare app level module which depends on views, and components
angular.module('myApp', [
'ngRoute',
'myApp.home',
'ngAnimate',
'ui.bootstrap',
'ui.date'
]).
config(['$routeProvider','$httpProvider','$locationProvider', function($routeProvider) {
$routeProvider.otherwise({redirectTo: '/home'});
}])
.filter('upper', function() {
return function (input) {
return input.toUpperCase();
};
})
view1.js(home.js)
'use strict';
angular.module('myApp.home', ['ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/home', {
templateUrl: 'home/home.html',
controller: 'HomeCtrl'
});
}])
view1_test.js(home_test.js)
'use strict';
describe('myApp.home module', function() {
beforeEach(module('myApp.home'));
}
describe('Filter: upper', function() {
var upperFilter;
beforeEach(inject(function (_upperFilter_) {
upperFilter = _upperFilter_;
}));
it('should be able to uppercase an entire input', function() {
expect(upperFilter('hello')).toBe('HELLO');
expect(upperFilter('hello world')).toBe('HELLO WORLD');
});
});
在运行该测试。我得到这个:
Chrome 47.0.2526 (Windows 7 0.0.0) myApp.home module Filter: upper should be able to uppercase an entire input FAILED Error: [$injector:unpr] Unknown provider: upperFilterProvider <- upperFilter http://errors.angularjs.org/1.4.7/ $injector/unpr?p0=upperFilterProvider%20%3C-%20upperFilter at C:/webroot/member_portal/app/bower_components/angular/angular.js:68:12 at C:/webroot/member_portal/app/bower_components/angular/angular.js:4289:19 at Object.getService [as get] (C:/webroot/member_portal/app/bower_components/angular/angular.js:4437:39) at C:/webroot/member_portal/app/bower_components/angular/angular.js:4294:45 at getService (C:/webroot/member_portal/app/bower_components/angular/angular.js:4437:39) at Object.invoke (C:/webroot/member_portal/app/bower_components/angular/angular.js:4469:13) at Object.workFn (C:/webroot/member_portal/app/bower_components/angular-mocks/angular-mocks.js:2438:20) Error: Declaration Location at window.inject.angular.mock.inject (C:/webroot/member_portal/app/bower_components/angular-mocks/angular-mocks.js:2409:25) at Suite. (C:/webroot/member_portal/app/home/home_test.js:766:20) at Suite. (C:/webroot/member_portal/app/home/home_test.js:763:5) at C:/webroot/member_portal/app/home/home_test.js:3:1 TypeError: upperFilter is not a function at Object. (C:/webroot/member_portal/app/home/home_test.js:771:20) Chrome 47.0.2526 (Windows 7 0.0.0): Executed 1 of 54 (1 FAILED) (skipped 53) ERROR (0.327 secs/0.005 secs)
您能否显示一个例子。我试着改变beforeEach(module('myApp.home')); - > beforeEach(module('myApp'));还beforeEach(module('myApp.home')); - > beforeEach(module('myApp')); beforeEach(module('myApp.home'));这两个导致错误:[$ injector:modulerr]由于: 错误:[$ injector:modulerr]无法实例化模块myApp由于: 错误:[$ injector:nomod] Module' ngAnimate'不可用!您拼错了模块名称或忘记加载模块名称。 –
由于'myApp'模块中的依赖关系,此错误即将出现。要么嘲笑这些依赖关系,要么在另一个模块中隔离过滤器,只需注入该模块,或者可以在测试中包含这些依赖关系。 – jkris