javascript - 引用错误: Can't find variable: $controller

标签 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

非常感谢您提供的任何帮助,因为我知道我非常接近完成这项工作,而且我知道这只是我所缺少的一些简单的东西。

最佳答案

您需要注入(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/

相关文章:

javascript - 来自http响应的 Angular 局部变量绑定(bind)

testing - 如何实现 IdentityServer4 的集成测试?

design-patterns - 使白盒测试更容易的编程设计模式?

javascript - 如何在AngularJS中通过两个属性删除元素和数组?

javascript - 保留客户端 HTML 标记并在回发后保留

javascript - Angular js 两种方式数据绑定(bind)

c# - 单元测试与集成测试

JavaScript 图表和图形

javascript - 通过javascript渲染

javascript - 在带有 Angular JS 模型的 HTML 页面中设置的对象标记值在 Microsoft Edge 浏览器中不起作用