ReferenceError:找不到变量:$ controller

时间:2014-02-10 13:51:50

标签: javascript angularjs testing visual-studio-2012 jasmine

行, 所以我试图首次在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

感谢任何帮助,因为我知道我真的很接近这个工作,我知道这只是一件我想念的简单事。

1 个答案:

答案 0 :(得分:5)

您需要注入$controller。一种方法是:

it("has tasks defined", inject(function($controller) {
   var $scope = {};
   $controller("TaskListController", { $scope: $scope });
   expect($scope.tasks).toBeDefined();
}));

您还需要在beforeEach

中引用正确的模块

所以你需要做以下事情: -

beforeEach(module('appControllers'));