Angularjs使用Jest模块注入进行测试

时间:2018-03-20 13:27:05

标签: angularjs testing jest

尝试使用Jest测试角度服务并收到此错误:

[$injector:nomod] Module 'superag' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

如何模拟我的模块' superag'并提供给mathService

我是否必须在每次测试时使用模块声明导入app.js文件?

Ps。:我已经尝试beforeEach(module('superag'))但没有成功

的package.json

"jest": {
    "collectCoverageFrom": [
      "**/*.{js}",
      "!**/node_modules/**"
    ]
  },
  "devDependencies": {
    "angular-mocks": "^1.6.9",
    "jest-cli": "^23.0.0-alpha.0"
  },
  "dependencies": {
    "angular": "^1.6.9"
  }
}

math.service.js

function MathService(){

    var addTwoNumbers = function(x, y){
      return x + y;
    };

    return {
      addTwoNumbers
    };
  }
angular.module('superag').factory('mathservice', MathService);

math.service.test.js

require('angular');
require('angular-mocks');
require('./math.service.js');

describe('Math service - addTwoNumbers', () => {

  beforeEach(
    angular.mock.module('superag')
  );

  var _mathservice;

  beforeEach(inject((mathservice) => {
    _mathservice = mathservice;
  }));

  it('1 + 1 should equal 2', () => {
    var actual = _mathservice.addTwoNumbers(1,1);
    expect(actual).toEqual(2);
  });

});

2 个答案:

答案 0 :(得分:4)

当您声明对未在任何位置定义或尚未在当前浏览器上下文中加载的模块的依赖时,会发生此错误。

当您收到此错误时,请检查相关模块的名称是否正确以及是否已加载定义此模块的文件(通过<script>标记,加载项(如require.js)或测试像业力一样的线束。

此错误的一个不太常见的原因是尝试“重新打开”尚未定义的模块。

要定义新模块,请使用名称和相关模块数组调用angular.module,如下所示:

// When defining a module with no module dependencies,
// the array of dependencies should be defined and empty.
var myApp = angular.module('myApp', []);

要检索对同一模块的引用以进行进一步配置,请调用不带数组参数的angular.module。

var myApp = angular.module('myApp');

如果尚未定义模块,则在没有依赖项数组的情况下调用angular.module会导致抛出此错误。要修复它,请使用名称和空数组定义模块,如上面的第一个示例所示。

答案 1 :(得分:1)

您需要使用角度模拟中提供的模块功能加载被测模块,因此可以在测试中按docs进行测试。

beforeEach(module('superag'))

然后你可以注入你的服务。