【发布时间】:2014-03-04 02:08:13
【问题描述】:
我正在尝试为我的应用程序中的控制器编写一个简单的单元测试,但 Jasmine 引发了“未知提供者”错误。我为帮助检索模板 url 而编写的提供程序令人窒息。提供者被注入到一个配置函数中,所以我可以在 routes.js 中使用它。
我得到的具体错误是:Error: Unknown provider: assetPathProvider
这是我的 Karma 配置:
files: [
'vendor/assets/javascripts/jquery.js',
'vendor/assets/javascripts/angular.js',
'spec/javascripts/lib/angular/angular-mocks.js',
'vendor/assets/javascripts/angular-*.js',
'vendor/assets/javascripts/*.js',
'app/assets/javascripts/initialize.js',
'app/assets/javascripts/**/*.js',
'spec/javascripts/unit/**/*.js'
],
我像这样初始化我的应用:
Viewfinder = angular.module('viewfinder', [
'ui.bootstrap',
'scroll',
'ngCookies',
'ngResource',
'chart',
'http-auth-interceptor',
'facebook-connect',
'twitter-connect',
'Alerts',
'smartTable.table',
'ngClipboard',
'angularFileUpload'
])
这是 routes.js
的顶部Viewfinder.config(['$routeProvider', '$locationProvider', 'assetPathProvider', function($routeProvider, $locationProvider, assetPathProvider) {
提供者用于在 routes.js 中检索正确的模板位置
...
templateUrl: assetPathProvider.get('welcome/signed_in.html'),
....
这是提供者本身:
Viewfinder.provider('assetPath', [function() {
this.get = function(path) {
if(angular.isDefined(gon.config.manifest)) {
return '/assets/' + gon.config.manifest[path]
} else {
return '/assets/' + path
}
}
this.$get = function() {
return {
get: this.get
}
}
}]);
我已将我的规范简化为尽可能简单,但我无法克服 Unknown provider 错误。
这是规范:
describe('OneSheetPackagesViewController', function() {
var $rootScope, $scope, $controller, message
beforeEach(function() {
module('viewfinder', function(assetPathProvider) {})
})
beforeEach(inject(function(_$rootScope_) {
message = 'hello'
}))
it("should successfully submit a comment", function() {
console.log(message)
expect(message).toBeDefined()
})
})
【问题讨论】:
标签: javascript angularjs unit-testing jasmine karma-runner