为什么简单的基于JasmineJS和AngularJS的单元测试不起作用

时间:2013-06-25 20:21:57

标签: javascript angularjs jasmine

我正在尝试使用Jasmine编写一个简单的测试。测试检查$scope.testFlag是否设置为false。

这是我的测试代码

describe('Abc Controller', function() {
  var $scope = null;
  var ctrl = null;

  //you need to indicate your module in a test
  beforeEach(module('myApp'));
  beforeEach(inject(function($rootScope, $controller) {
    $scope = $rootScope.$new();
    ctrl = $controller('abcController', {
      $scope: $scope
    });
  }));


  // test 1
  it('testFlag should be set to False', function() {
    expect( $scope.testFlag).toEqual(false);
  });


});

但由于某种原因,我收到了这个错误:

Error: Unknown provider: ConfigProvider <- Config <- collectionMetaFactory

以下是我的应用程序的app.js在testRunner.html

中包含的内容
var app = angular.module('myApp') 
    app.constant('Config',
    {
        baseURL : serviceURL,
        httpTimeout : 3600000 // 1 minute
    });
    app.config(function($logProvider) {
        $logProvider.debugEnabled(true);
    });

我错过了什么?

这是控制器的代码段

app.controller('abcController', function ($scope, $log,abcFactory, Config) {

        $scope.testFlag = false;

       // more code follows

});

如果您需要查看更多应用程序代码(如工厂,服务和控制器),请告诉我们

1 个答案:

答案 0 :(得分:0)

您尚未使用Config提供测试,因此无法识别Config是什么,这就是您收到此错误的原因。

解决方案是使用Config模块将$provide注入测试。方法如下:

describe('Abc Controller', function() {
  var $scope = null;
  var ctrl = null;
  var Config = {
     baseURL : 'someURL',
     httpTimeout : 3600000 // 1 minute
  };

  beforeEach(function(){
        beforeEach(module('myApp'));
        module(function (_$provide_) {
            $provide = _$provide_;
            $provide.value('Config', Config);
        });
  });

  //you need to indicate your module in a test

  beforeEach(inject(function($rootScope, $controller) {
    $scope = $rootScope.$new();
    ctrl = $controller('abcController', {
      $scope: $scope
    });
  }));


  // test 1
  it('testFlag should be set to False', function() {
    expect( $scope.testFlag).toEqual(false);
  });
});

这应该成功运行测试。

希望这有助于其他人面临类似的问题。