好的, 因此,我第一次尝试在 Angular JS 项目上使用 Jasmine 进行单元测试,但遇到了一些障碍。
我正在关注这篇博客文章中有关如何 set this all up in Visual Studio 的非常好的引用资料。
我的测试是在类库项目中进行的,如下所示:-
/// <reference path="../../../../src/tasks.web/scripts/angular-1.2.10.js" />
/// <reference path="../../../../src/tasks.web/scripts/angular-route-1.2.10.js" />
/// <reference path="../../../../src/tasks.web/scripts/app.js" />
/// <reference path="../../../../src/tasks.web/scripts/controllers.js" />
/// <reference path="../lib/angular/angular-mocks.js" />
describe("TaskListController", function () {
beforeEach(module('taskApp.controllers'));
it("has tasks defined", function() {
var $scope = {};
$controller("TaskListController", { $scope: $scope });
expect($scope.tasks).toBeDefined();
});
});
我的应用程序的其余部分如下所示:-
app.js
var app = angular.module("taskApp", [
"ngRoute",
"appControllers"
]);
app.config(["$routeProvider",
function($routeProvider) {
$routeProvider.
when("/tasks", {
templateUrl: "partials/task-list.html",
controller: "TaskListController"
}).
otherwise({
redirectTo: "/tasks"
});
}
]);
Controller .js
var appControllers = angular.module("appControllers", []);
appControllers.controller("TaskListController", function ($scope) {
$scope.tasks = {};
});
所有引用的文件都在那里(没有 404)。 Visual Studio 发现测试正常并运行它,但是我得到 ReferenceError: Can't find variable: $controller
非常感谢您提供的任何帮助,因为我知道我非常接近完成这项工作,而且我知道这只是我所缺少的一些简单的东西。
最佳答案
您需要注入(inject)$controller
。一种方法是:
it("has tasks defined", inject(function($controller) {
var $scope = {};
$controller("TaskListController", { $scope: $scope });
expect($scope.tasks).toBeDefined();
}));
您还需要在 beforeEach
中引用正确的模块
因此您需要执行以下操作:-
beforeEach(module('appControllers'));
关于javascript - 引用错误: Can't find variable: $controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21679044/