Jasmine、Angular 和 Resharper:在单元测试中注入控制器时遇到问题

Jasmine, Angular, and Resharper: Trouble injecting a controller in a unit test

我无法将 angular 控制器注入我的 jasmine 规范文件。错误以 http://errors.angularjs.org/1.3.3/$injector/modulerr...

开头

我正在使用 Visual Studio 2013 和 Resharper 8.2.3。以下是相关片段:

茉莉

///<reference path="~/Scripts/jasmine/jasmine.js"/>
///<reference path="~/Scripts/jasmine/jasmine-html.js"/>
///<reference path="~/Scripts/jasmine/boot.js"/>
///<reference path="~/Scripts/angular-core/angular.min.js"/>
/// <reference path="~/Scripts/angular-core/angular-mocks.js" />

/// <reference path="~/Scripts/angular-controllers/FormsAdminSecurityAccountAdmin.js" />

describe("Sec Acct Admin Controller", function () {
    var $controllerConstructor, scope, ctrl;

    beforeEach(module('accounts'));
    beforeEach(inject(function($rootScope, $controller) {
        scope = $rootScope.$new();
        $controllerConstructor = $controller;
        ctrl = $controllerConstructor('accountsCtrl', { $scope: scope });
    }));

    it("the controller is present", function () {
        expect(ctrl).toBeDefined();
    });
});

Angular

angular.module('accounts', ['cocUtilities', 'angucomplete-alt', 'ui.date', 'ui.grid', 'ui.grid.pinning', 'ui.grid.pagination', 'ui.grid.resizeColumns', 'ui.grid.moveColumns']);

angular.module('accounts').config(['$locationProvider', function ($locationProvider) {      // Allows $location to parse the arguments to a URL
    $locationProvider.html5Mode({enabled: true, requireBase: false});
}]);

angular.module('accounts').controller('accountsCtrl', ['$scope', '$window', '$location', 'dataFactory', 'cccsLookupForAccounts', 'uiGridConstants', function ($scope, $window, $location, dataFactory, cccsLookupForAccounts, uiGridConstants) { ... }

最后,我能够使用测试规范和 angular 文件获得一个简化版本。问题似乎是注入这个特定的 module/controller,但我一直没能找到问题所在。如果您能提供任何帮助,我将不胜感激。谢谢!

事实证明我没有在规范文件的顶部包含所需的文件。我正在尝试测试的模块具有依赖项,但测试运行器无法找到它们,因为我没有为具有依赖项的文件包含正确的 <reference path=...。当我添加这些时,它起作用了。