Javascript 角控制器模拟在我的摩卡测试中不存在

Javascript 角控制器模拟在我的摩卡测试中不存在,javascript,angularjs,unit-testing,testing,karma-mocha,Javascript,Angularjs,Unit Testing,Testing,Karma Mocha,目前运行Angular 1.2.x,含karma mocha 0.2.0和karma chai 0.1.0 以下是我尝试为基于Mentors模块的Mentors可用性仪表板Ctrl编写一些简单的单元测试。当单独运行时,一切都会通过,但当我按原样运行测试时,会出现一个错误,说明“error:[ng:areq]参数'MentorAvailabilityDashboardCtrl'不是函数,未定义” 这让我觉得Mocha或AngularMock在测试运行一次后被重置,并且在测试运行一次后未定义 例子:

目前运行Angular 1.2.x,含karma mocha 0.2.0和karma chai 0.1.0

以下是我尝试为基于
Mentors
模块的
Mentors可用性仪表板Ctrl
编写一些简单的单元测试。当单独运行时,一切都会通过,但当我按原样运行测试时,会出现一个错误,说明“error:[ng:areq]参数'MentorAvailabilityDashboardCtrl'不是函数,未定义”

这让我觉得Mocha或AngularMock在测试运行一次后被重置,并且在测试运行一次后未定义

例子: 测试同时运行

  • 第一次测试=通过
  • 第二次测试=失败“导师可用性仪表板CTRL未定义”
  • 第三次测试=失败“导师可用性仪表板CTRL未定义”
  • 第四次测试=失败“导师可用性仪表板CTRL未定义”
一次运行所有测试(注释其他测试)

  • 第一次测试=通过
  • 第二次测试=通过
  • 第三次测试=通过
  • 第四次测试=通过
问题: 为什么我的控制器在第一次测试运行后没有定义,我能做些什么让它在每次测试运行中保持不变

我的代码: 实际误差:
PhantomJS 1.9.8(Mac OS X 0.0.0)导师可用性DashboardCtrl”在每个“hook:workFn”之前的“初始化时应验证指定字段”失败
错误:[ng:areq]参数“导师可用性DashboardCtrl”不是函数,未定义
http://errors.angularjs.org/1.2.26/ng/areq?p0=MentorAvailabilityDashboardCtrl&p1=not%20a%20function%2C%20got%20undefined
在assertArg(/Users/bdoug/Bloc/vendor/assets/bower\u components/angular/angular.js:1509)
在assertArgFn(/Users/bdoug/Bloc/vendor/assets/bower\u components/angular/angular.js:1520)
at/Users/bdoug/Bloc/vendor/assets/bower_components/angular/angular.js:7278

在/Users/bdoug/Bloc/frontend/test/tests_index.js:15072中,似乎需要在beforeach块中定义控制器,这可能与此有关。可能是范围问题。您可以尝试一起避免角度模拟,直接测试控制器功能。由于您使用的是es6模块,因此可以将控制器功能直接导出为命名导出

export function MyController($scope, Flash) {
 //...
}

MyController.$inject = ['$scope', 'Flash'];

angular.module('Mentors').controller('MyController')
然后在测试中

import sinon from 'sinon';
import {MyController} from './my_controller'


it('...', function() {
  let scope = {};
  let Flash = sinon.mock();

  MyController(scope, Flash);

  //... assertions
})

我收到以下错误:[$injector:nomod]模块“导师”不可用!您要么拼错了模块名,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。事实证明,我只需要添加
…,[])
export function MyController($scope, Flash) {
 //...
}

MyController.$inject = ['$scope', 'Flash'];

angular.module('Mentors').controller('MyController')
import sinon from 'sinon';
import {MyController} from './my_controller'


it('...', function() {
  let scope = {};
  let Flash = sinon.mock();

  MyController(scope, Flash);

  //... assertions
})