我正在尝试在Angular应用程序中使用Jasmine进行一些单元测试,但遇到一些错误。
错误
Error: [$injector:modulerr] Failed to instantiate module LocalStorageModule due to: Error: [ng:areq] Argument 'fn' is not a function, got string
规格
describe("testing the controller", function () { var $controllerConstructor; var scope; beforeEach(module('app', ['ngRoute', 'LocalStorageModule'])); beforeEach(inject(function ($controller, $rootScope) { $controllerConstructor = $controller; scope = $rootScope.$new(); })); it("should validate a contact", function () { var ctrl = $controllerConstructor('crmContatosCtrl', { $scope: scope }); }); });
App.js
angular .module('app', ['ngRoute', 'LocalStorageModule']) .config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) { // My routeProvider here }]);
我既没有使用Yeoman也没有使用Karma,因为这是我使用Angular的第一个应用程序。
包含文件
<script src="../../Scripts/jasmine/jasmine.js"></script> <script src="../../Scripts/jasmine/jasmine-html.js"></script> <script src="../../Scripts/jasmine/boot.js"></script> <script src="../../Scripts/angular/angular.js"></script> <script src="../../Scripts/angular/angular-mocks.js"></script> <script src="../../Scripts/angular/angular-route.js"></script> <script src="../../Scripts/angular/angular-local-storage.js"></script> <script src="../../Scripts/ngStorage.js"></script> <script src="../../Scripts/ng-infinite-scroll.js"></script> <script src="../../Scripts/angular/common.js"></script> <link href="../../Scripts/jasmine/jasmine.css" rel="stylesheet" /> <script src="../core/app.js"></script> <script src="../crm/contatos.js"></script> <script src="contatosSpec.js"></script>
我认为您可能只是对测试依赖项的配置存在问题。没有Karma,我不知道您如何进行测试,但是我想您在某个地方有Jasmine的配置文件,您可以在其中指定要包含的文件。您必须包含所有文件,并且必须首先包含所有库。请注意顺序,并尝试遵守与运行应用程序所用的html文件相同的顺序。
如果顺序错误,JS将在包含所需的库之前尝试执行。在您的情况下,甚至可能是整个角度堆栈。
更新资料
不要忘了Jasmine使用它自己的html文件工作,并且如果您不告诉它,它将不包括您通常使用的库。并且也不要忘记包含Angular Mock库,这对您的测试必不可少
更新2
好吧,我想我发现了你为什么有问题
这段代码有问题
beforeEach(module('app', ['ngRoute', 'LocalStorageModule']));
当使用module(’smthg’,[])调用模块时, 创建的 是角形,而不是调用它。您应该改用此表单,而无需重新导入已经包含在主模块中的服务。
beforeEach(module('app'));
请查看角度文档https://docs.angularjs.org/guide/module的“创建与检索”部分