0

无法弄清楚如何使控制器测试正常工作。我正在玩 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);
    });
});

});

但这行不通。

我错过了什么?

4

1 回答 1

3

正如在以下问题中所回答的,控制器需要使用新范围手动实例化:

如何使用 Mocha 在 Angular.js 中测试使用 angular.module().controller() 创建的控制器

此外,您正在使用的项目(它的我的:-))正在定义路由定义中的控制器,而不是调用 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});
        }]);
    });

    ....
});
于 2013-10-06T10:25:17.493 回答