AngularJS Karma 上的未知提供程序错误,其值已通过 $stateProvider 解析
AngularJS Unknown provider error on Karma with value resolved with $stateProvider
当我 运行 我的 Karma 测试时显示以下错误:
Error: [$injector:unpr] Unknown provider: cartProvider <- cart <- CartCtrl
这是我的代码:
值cart
在此处解析:
angular.module 'myApp'
.config ($stateProvider) ->
$stateProvider.state 'cart',
url: '/cart'
resolve:
cart: (Cart) ->
Cart.getProducts()
templateUrl: 'app/cart/cart.html'
controller: 'CartCtrl'
controllerAs: 'cart'
控制器在这里:
angular.module 'myApp'
.controller 'CartCtrl', (Cart, cart) ->
this.cart = cart
this.removeFromCart = (id) ->
Cart.removeProduct id
return this
而且我想我需要在此处的控制器上注入已解决的 cart
,但我不知道如何:
describe 'Controller: CartCtrl', ->
# load the controller's module
beforeEach module 'myApp'
CartCtrl = undefined
scope = undefined
# Initialize the controller and a mock scope
beforeEach inject ($controller, $rootScope) ->
scope = $rootScope.$new()
CartCtrl = $controller 'CartCtrl',
$scope: scope
it 'should ...', ->
expect(1).toEqual 1
您需要记住,在测试您的控制器时,myApp
配置块不会起作用。
您只需为 "cart" 和 "Cart" 注射器提供一个值,例如
var cart, Cart, scope, CartCtrl;
beforeEach(function() {
var cart = ['some', 'mocked', 'products'],
Cart = jasmine.createSypObj('Cart', ['removeProduct']);
module('myApp', function($provide) {
$provide.value('cart', cart);
$provide.value('Cart', Cart);
})
inject(function($controller, ...) {
// and so on
});
});
为直接的 JS 道歉,我 永远不会 进入 CoffeeScript
您需要在您的状态定义中声明一个内联控制器,以使您解析的 cart
可用于注入器。例如:
$stateProvider.state 'cart',
url: '/cart'
resolve:
cart: (Cart) ->
Cart.getProducts()
templateUrl: 'app/cart/cart.html'
controller: (cart, Cart) ->
this.cart = cart
this.removeFromCart = (id) ->
Cart.removeProduct id
return this
controllerAs: 'cart'
我知道那不是很理想,但这是我的经验。
当我 运行 我的 Karma 测试时显示以下错误:
Error: [$injector:unpr] Unknown provider: cartProvider <- cart <- CartCtrl
这是我的代码:
值cart
在此处解析:
angular.module 'myApp'
.config ($stateProvider) ->
$stateProvider.state 'cart',
url: '/cart'
resolve:
cart: (Cart) ->
Cart.getProducts()
templateUrl: 'app/cart/cart.html'
controller: 'CartCtrl'
controllerAs: 'cart'
控制器在这里:
angular.module 'myApp'
.controller 'CartCtrl', (Cart, cart) ->
this.cart = cart
this.removeFromCart = (id) ->
Cart.removeProduct id
return this
而且我想我需要在此处的控制器上注入已解决的 cart
,但我不知道如何:
describe 'Controller: CartCtrl', ->
# load the controller's module
beforeEach module 'myApp'
CartCtrl = undefined
scope = undefined
# Initialize the controller and a mock scope
beforeEach inject ($controller, $rootScope) ->
scope = $rootScope.$new()
CartCtrl = $controller 'CartCtrl',
$scope: scope
it 'should ...', ->
expect(1).toEqual 1
您需要记住,在测试您的控制器时,myApp
配置块不会起作用。
您只需为 "cart" 和 "Cart" 注射器提供一个值,例如
var cart, Cart, scope, CartCtrl;
beforeEach(function() {
var cart = ['some', 'mocked', 'products'],
Cart = jasmine.createSypObj('Cart', ['removeProduct']);
module('myApp', function($provide) {
$provide.value('cart', cart);
$provide.value('Cart', Cart);
})
inject(function($controller, ...) {
// and so on
});
});
为直接的 JS 道歉,我 永远不会 进入 CoffeeScript
您需要在您的状态定义中声明一个内联控制器,以使您解析的 cart
可用于注入器。例如:
$stateProvider.state 'cart',
url: '/cart'
resolve:
cart: (Cart) ->
Cart.getProducts()
templateUrl: 'app/cart/cart.html'
controller: (cart, Cart) ->
this.cart = cart
this.removeFromCart = (id) ->
Cart.removeProduct id
return this
controllerAs: 'cart'
我知道那不是很理想,但这是我的经验。