gpt4 book ai didi

angularjs - 尝试使用 Jasmine 和 AngularJS 进行单元测试时,参数 'fn' 不是函数

转载 作者:行者123 更新时间:2023-12-04 05:38:16 31 4
gpt4 key购买 nike

我正在尝试在我的 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 });
});
});

应用.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 会在它需要的库被包含之前尝试执行。在您的情况下,甚至可能是整个 Angular 堆栈。

更新

不要忘记 Jasmine 使用它自己的 html 文件工作,如果你不告诉它,它不会包含你通常使用的库。并且不要忘记包含 Angular Mock 库,这对您的测试至关重要

更新 2

好的,我想我找到了你有问题的原因

这段代码有问题

beforeEach(module('app', ['ngRoute', 'LocalStorageModule']));

当你使用 module('smthg',[]) 调用模块时,你是 创建 它,而不是调用它。您应该改用此表单,无需重新导入您已包含在主模块中的服务。
beforeEach(module('app'));

检查 Angular 文档 https://docs.angularjs.org/guide/module 的创建与检索部分

关于angularjs - 尝试使用 Jasmine 和 AngularJS 进行单元测试时,参数 'fn' 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27509523/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com