【问题标题】:Testing Angular Controllers defined like angular.module('myApp').controller(测试定义为 angular.module('myApp').controller(
【发布时间】:2013-04-07 23:29:22
【问题描述】:

我在玩https://github.com/angular/angular-seed

控制器在 app/controllers.js 中定义如下

'use strict';
function MyCtrl1() {}
MyCtrl1.$inject = [];

这不会通过 jshint,因为 MyCtrl1 在 app/app.js 中被引用,而不是在我的全局列表中。

根据Brian Ford和其他人我读过的首选风格是

angular.module('myApp').controller('MyCtrl1', [], function () {});

我更喜欢这个,因为它不在全局范围内,但现在我的睾丸规格失败了,因为它不再起作用了:

var myCtrl1;
beforeEach(function(){
  myCtrl1 = new MyCtrl1();
});

如何获得对这个控制器的引用,该控制器以“首选”样式定义以用于测试目的?

【问题讨论】:

  • 这可能和我回答的问题相同here 您需要添加beforeEach(module('myApp'));

标签: javascript unit-testing angularjs karma-runner


【解决方案1】:

归功于 Javito 和 Xesued:

beforeEach(module('myApp'));
var scope, ctrl;
beforeEach(inject(function($controller, $rootScope) {
    scope = $rootScope.$new();
    ctrl = $controller('MyCtrl1', {$scope: scope});
}));

【讨论】:

    【解决方案2】:

    试试,

    beforeEach(inject(function($controller) {
        scope = {};    
        MyCtrl1 = $controller('MyCtrl1', {
          $scope: scope
        });
      }));
    

    【讨论】:

    • 关闭,看来您需要一个真正的范围,以及 Xesued 在 cmets 中建议的 beforeEach。代码在这里不起作用,我想我必须自己回答。对不起,我想给你功劳:(
    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 2019-08-06
    相关资源
    最近更新 更多