无法弄清楚如何使控制器测试工作。我正在玩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);
});
});
});
但这不起作用。
我错过了什么?
答案 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});
}]);
});
....
});