无法使控制器测试与AngularJS + RequireJS一起使用

时间:2013-10-04 15:34:23

标签: angularjs requirejs jasmine karma-runner

无法弄清楚如何使控制器测试工作。我正在玩ngStart种子项目。所以我分叉了存储库(https://github.com/Havrl/ngStart)并希望创建一个非常基本的单元测试。

我的控制器测试文件:

define(function() {
"use strict";
describe("the contactcontroller", function () {
    var contactController, scope;

    beforeEach(function () {
        module("contact");

        inject(["ContactController", function (_contactController) {
            contactController = _contactController;
        }]);
    });


    it("should give me true", function () {
        expect(true).toBe(true);
    });
});

});

但这不起作用。

我错过了什么?

1 个答案:

答案 0 :(得分:3)

如下面的问题所述,控制器需要使用新范围手动实例化:

how to test controllers created with angular.module().controller() in Angular.js using Mocha

此外,您正在使用的项目(它的我的:-))是在路径定义中定义控制器而不是调用angular.controller(...)。

缺点是控制器的名称不知道为angularJS(afaik),所以上面答案中的代码不起作用:

ctrl = $controller("ContactController", {$scope: scope });

相反,您必须在测试文件中使用requireJS显式加载控制器,并将函数提供给$ controller(..)调用,如下所示:

define(["ContactController"], function(ContactController) {
"use strict";
describe("the contactcontroller", function () {
    var contactController, scope;

    beforeEach(function () {
        module("contact");

        inject(["$rootScope", "$controller", function ($rootScope, $controller) {
            scope = $rootScope.$new();
            contactController = $controller(ContactController, {$scope: scope});
        }]);
    });

    ....
});