首页 > 解决方案 > 为服务编写单元测试:AngularJS

问题描述

jasmine对于使用框架和测试运行程序为服务编写适当的单元测试,我几乎没有问题karma

这是我在example-service.js中实现的:

export default class ExampleService {
constructor($resource, $http) {
'ngInject';

this.$resource = $resource;
this.$http = $http;
}

exampleMethodOne() {
//some code lines
}

exampleMethodTwo() {
//some code lines 
}

}
ExampleService.selector = 'myExampleService';

这是我在测试example-service.test.js中写的

let myExampleService, $httpBackend;

  beforeEach(() => {
    angular
      .module('exampleApp', [])
      .service(ExampleService.selector, ExampleService);
    angular.mock.module('exampleApp');
  });

  beforeEach(inject((_myExampleService_, _$httpBackend_) => {
    myExampleService = _myExampleService_;
    $httpBackend = _$httpBackend_;
  }));

我已经导入了angular-mocks.jsexample-service.js

当我尝试这种情况时,控制台会抛出Error: [$injector:unpr] Unknown provider: $resourceProvider <- $resource <- myExampleService 错误。

请帮我解决这个问题。

标签: javascriptangularjsunit-testingecmascript-6karma-jasmine

解决方案


$resource需要加载 angular-resource.js 和相应的模块:

  beforeEach(() => {
    angular
      .module('exampleApp', ['ngResource'])
      .service(ExampleService.selector, ExampleService);
    angular.mock.module('exampleApp');
  });

推荐阅读