AngularJS Karma上的未知提供程序错误,其值已使用$ stateProvider解析

时间:2015-02-04 00:05:46

标签: angularjs angular-ui karma-runner

当我运行我的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

2 个答案:

答案 0 :(得分:3)

您需要记住,在测试控制器时,myApp配置块不起作用。

您只需为&#34;购物车&#34;提供价值。和&#34;购物车&#34;注射剂,例如

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

答案 1 :(得分:0)

您需要在状态定义中声明内联控制器,以使已解析的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'

我知道那不是很理想,但那是我的经历。