当前位置: 首页 > 面试题库 >

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

薛滨海
2023-03-14
问题内容

我正在尝试在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的“创建与检索”部分



 类似资料:
  • 本文向大家介绍使用Jasmine和Karma对AngularJS页面程序进行测试,包括了使用Jasmine和Karma对AngularJS页面程序进行测试的使用技巧和注意事项,需要的朋友参考一下 AngularJS是继jQuery之后发生在JavaScript上最好的东西。这也是JavaScript开发一直以来想要的方式。Angular主要的优点之一就是它的依赖注入(Dependency Inje

  • 问题内容: 我有一个已定义的AngularJS指令。我正在尝试与Jasmine进行单元测试。 根据此建议,我的JasmineJavaScript如下所示: 当我在Jasmine spec错误中运行此命令时,出现以下错误: 我想要的只是让templateUrl原样加载- 我不想使用。我相信这可能与使用ngMock而不是ngMockE2E有关。如果是罪魁祸首,如何使用后者而不是前者? 提前致谢! 问题

  • 问题内容: 编辑:本文末尾的“快速与肮脏”解决方案 我使用的是AngularUI-Bootstrap中的模式窗口,其方式与网站上说明的相同,只是我分割了文件。因此,我有: CallingController.js: modalController.js: 当我使用Karma测试此代码(在karma配置文件中加载了 ui-bootstrap-tpls.min.js 文件)时,出现以下错误: 错误:[

  • 我为javascript编写了Jasmine测试。我正在尝试使用Phantomjs运行Jasmine测试。我从Phantomjs.org下载了Phantomjs并尝试使用phantomjs.exe//phantom jasmine路径运行它http://localhost/myJasmineTestRunner.html.Google帮不了我。有人能建议我如何使用phantomjs测试jasmin

  • 我接着跑道: 咕噜的因果报应 以运行测试,但它失败,出现以下错误:

  • 问题内容: 我对Node相对较新,并且正在使用knex和书架进行项目。我在对代码进行单元测试时遇到了一些麻烦,但是我不确定自己做错了什么。 基本上,我有一个看起来像这样的模型(称为VorcuProduct): 还有一个函数,如果数据库中不存在VorcuProduct,它将保存它。非常简单。执行此操作的函数如下所示: 哪种方法可以在不影响数据库的情况下进行测试?我是否需要模拟以返回模型或未定义模型(