【问题标题】:Unable to inject $resource in jasmine unit test无法在 jasmine 单元测试中注入 $resource
【发布时间】:2018-08-09 13:25:11
【问题描述】:

我正在尝试测试我编写的使用 $resource 的服务,但在尝试将 $resource 注入我的测试规范时遇到问题。

我正在使用带有 AngularJS 1.6.x 的 Typescript,我的服务类如下所示:

export class MyDataService {

  constructor(
    private $resource: ng.resource.IResourceService
    ) {
    this.someResource = $resource('api/some-endpoint');
  }

  public getThings() {
    return this.someResource.get().$promise;
  }
}

还有我的测试规范(使用 Jasmine + Karma):

import { MyDataService } from './my-data-service.service';

describe('MyDataService Tests:', function() {
  let myDataService: MyDataService;
  let $resource: ng.resource.IResourceService;
  let resourceSpy: jasmine.Spy;

  beforeEach(inject(function(_$resource_){
    $resource = _$resource_;
    myDataService = new MyDataService($resource,);
    resourceSpy = spyOn(myDataService.resource, 'get');
  }));
  afterEach(function() {
    resourceSpy.calls.reset();
  });

  describe('when calling getThings', function() {
    it('should call get on the underlying resource instance', function() {
      myDataService.getThings(1, 15);
      expect(resourceSpy).toHaveBeenCalled();
    });
  });

我收到了Unknown provider: $resourceProvider <- $resource,并且我已确保将 angular-resource 作为我的 Karma 配置的一部分。

我也在使用 angular-mocks 和 Karma,我想知道这个错误是因为 $resource 不是 mocks 库的一部分吗?我没有声明要加载任何角度模块作为测试的一部分,因为我只想单独测试这些类,而不是加载整个模块。

谢谢

【问题讨论】:

  • 您可能应该添加beforeEach(angular.mock.module('ng-resource'));。一段时间后,我认为这些孤立的测试毫无意义——通常你的服务中有很多依赖项——常量、其他服务、$q 等。这使得手动注入所有依赖项变得如此痛苦,当你添加/删除时也是如此一些依赖 - 你总是需要重写你的测试。所以最好不要开始编写这些测试)
  • 感谢@PetrAveryanov - 这让我克服了错误。所以你是说在测试我自己的服务时我最好坚持传统方法,所以加载包含我的服务的模块,例如beforeEach(module('my-module'));
  • 是的,因为通常你的 service1 依赖于你的 service2,而你的 service2 又依赖于你的 service3。并且孤立地测试所有内容很难,而且效果不佳。

标签: angularjs typescript jasmine karma-jasmine jasmine2.0


【解决方案1】:

@PetrAveryanov 有正确的答案。我要指出——除非在 OP 的 Jasmine 中进行了一些花哨的骆驼案例检查,但不是我的 Jest 副本——自那篇帖子以来,模块的名称已更改为 ngResource:beforeEach(angular.mock.module('ngResource'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 2018-02-15
    相关资源
    最近更新 更多