使用Jasmine测试Angular服务:无法实例化模块应用程序

时间:2018-04-19 18:52:45

标签: angularjs jasmine karma-runner karma-jasmine

我正在尝试使用Jasmine为Angular Service创建一个简单的单元测试。 但是当我通过Karma运行测试时,我收到以下错误:

Failed to instantiate module app

而且我不知道为什么会收到此错误。我用Google搜索并尝试应用以下解决方案。但都没有效果。

  • 我尝试更改karma.conf.js中的文件序列。
  • 我尝试用不同的方式编写单元测试。我的意思是以不同的方式注入服务。

但错误仍然相同。

这是一个非常简单的代码。请查看以下代码以供参考:

string.service.js

(function () {
    "use strict";

    angular
        .module('app')
        .factory("stringService", stringService)

    function stringService() {

        return {
            checkForAlphaNumeric: checkForAlphaNumeric,
        };

        function checkForAlphaNumeric(string) {
            var regex = /^[a-zA-Z0-9]+$/;
            return regex.test(string);
        }
    }
})();

string.service.spec.js

describe("-----> String Service", function () {

    var stringService;
    beforeEach(function () {
        angular.mock.module('app');
        inject(function ($injector) {
            stringService = $injector.get('stringService');
        });
    });

    it("--> stringService should be Defined.", function () {
        expect(stringService).toBeDefined();
    });
});

karma.conf.js

// list of files / patterns to load in the browser
files: [
  //External
  './node_modules/angular/angular.js', // Angular Framework
  './node_modules/angular-mocks/angular-mocks.js', // Loads the Module for Tests
  './node_modules/@uirouter/angularjs/release/angular-ui-router.js', // UI-Router
  './node_modules/angular-route/angular-route.js',

  //Sub Modules
  './app/authentication/authentication.module.js',

  //Main Module
  './app/app.module.js', // Angular App

  //Controllers
  './app/authentication/login.controller.js',

  //Services and Factories
  './app/services/string.service.js',

  //Specs
  './app/licensing/licensing.controller.spec.js',
  './app/services/string.service.spec.js'
],
  • 交换模块和子模块参考也不起作用。
  • 在控制器和服务之前或之后放置模块和子模块参考也不起作用。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我已经弄清楚我的情景中出了什么问题。让我解释一下:

  • 我的 app 模块有多个依赖项。
  • 我的字符串服务 app 模块的一部分。
  • 现在,当您想测试字符串服务时,您必须在 karma.conf中引用所有(意味着全部) app 模块依赖项。 js 文件部分。即使是那些你没有用于服务的人。
  • 就我而言,我没有引用 qrcode 依赖关系,因为我没有在字符串服务中使用 qrcode
  • 这个缺失的参考文献正在创造问题。因此业力无法实例化模块 app

希望这有助于某人。