AngularJS与Jasmine、Karma和ng Mock的单元测试服务

Unit Testing Services in AngularJS with Jasmine, Karma and ng-Mock

本文关键字:Mock 单元测试 服务 ng Jasmine Karma AngularJS      更新时间:2023-09-26

我在单元测试中访问服务和过滤器时遇到问题(我还没有尝试指令)。我以前写过单元测试,但当我转到构建的配置时,我在访问我们的新服务以编写单元测试时遇到了问题。我不断地得到TypeError: null is not an object (evaluating 'currentSpec.$modules') in...。我读了一些书,看起来可能与我使用的节点包有关。我想知道更大的社区是否可以确保这些配置看起来正确。我把下面的文件缩写了。

根据当前的配置,这是错误的。

package.json

"devDependencies": {
  "angular": "1.5.7",
  "angular-mocks": "1.5.7",
  "jasmine": "2.4.1",
  "jasmine-core": "2.4.1",
  "karma-browserify": "5.1.0",
  "karma-chrome-launcher": "1.0.1",
  "karma-jasmine": "1.0.2",
  "karma-nyan-reporter": "0.2.4",
  "karma-phantomjs2-launcher": "0.5.0",
  "phantomjs2": "2.2.0"
}

因果报应.conf.js

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['browserify', 'jasmine'],
    files: [
      'app/main.js',
      'app/modules/**/*.spec.js',
      'app/shared/**/**/*.spec.js'
    ],
     preprocessors: {
       'app/main.js': ['browserify'],
       'app/modules/index.js': ['browserify'],
       'app/shared/index.js': ['browserify'],
       'app/modules/**/*.spec.js': ['browserify'],
       'app/shared/**/**/*.spec.js': ['browserify']
     },
  })
}

服务.spec.js

describe('Unit: Services', function() {
  require('angular-mocks/ngMock');
  var APIHelper;
  beforeEach(function() {
    angular.mock.module('app.common.services');
  });
  beforeEach(inject(function(apiHelperService) {
    APIHelper = apiHelperService; //injection is what's breaking
  }));
  it('should exist', function() {
    expect(APIHelper).toBeDefined();
  });
});

正在以正确的顺序加载服务和规范。此服务没有依赖项。我假设当我需要注入服务依赖项时,我会遇到同样的错误,但如果我能找到注入,我就可以根据需要注入正确的服务。

// This worked in a controller
angular.mock.inject(function GetDependencies(service) {
  service = service;
});

提前感谢您花时间仔细研究并可能回答问题。

-W

我的应用程序声明中没有包含require('angular-mocks/ngMock')。有时候,是一些小事。