我正在尝试在我的Angular应用程序中使用Jasmine进行一些单元测试,但我遇到了一些错误.
错误
Error: [$injector:modulerr] Failed to instantiate module LocalStorageModule due to:
Error: [ng:areq] Argument 'fn' is not a function, got string
Run Code Online (Sandbox Code Playgroud)
规格
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 });
});
});
Run Code Online (Sandbox Code Playgroud)
App.js
angular
.module('app', ['ngRoute', 'LocalStorageModule'])
.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
// My routeProvider here
}]);
Run Code Online (Sandbox Code Playgroud)
我还没有使用Yeoman和Karma,因为这是我使用Angular的fisrt应用程序.
包含的文件
<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>
Run Code Online (Sandbox Code Playgroud)
sam*_*sam 15
我认为您可能只是对配置中的测试依赖项存在问题.没有Karma我不知道你是如何进行测试的,但我猜你有一个Jasmine的配置文件,你可以在其中指定要包含的文件.您必须包含所有文件,并且必须首先包括所有库.小心订单,并尝试尊重您用于运行应用程序的html文件中的相同内容.
如果订单错误,JS将尝试在包含所需的库之前执行.在你的情况下甚至可能是整个角度堆栈.
更新
不要忘记Jasmine使用它自己的html文件,并且如果你不告诉它,它将不包括你经常使用的库.而且不要忘记包括Angular Mock库,这对您的测试至关重要
更新2
好吧我想我找到了你有问题的原因
这段代码有问题
beforeEach(module('app', ['ngRoute', 'LocalStorageModule']));
Run Code Online (Sandbox Code Playgroud)
当您使用模块('smthg',[])调用模块时,您正在创建它,而不是调用它.您应该使用此表单,而无需重新导入已包含在主模块中的服务.
beforeEach(module('app'));
Run Code Online (Sandbox Code Playgroud)
检查角度文档https://docs.angularjs.org/guide/module的"创建与检索"部分
| 归档时间: |
|
| 查看次数: |
6236 次 |
| 最近记录: |