无法在jasmine单元测试中注入$resource。

问题描述 投票:0回答:1

我试图测试我写的一个使用$resource的服务,但在尝试将$resource注入我的测试规范中时遇到了问题。

我使用Typescript和AngularJS 1.6.x,我的服务类看起来如下。

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配置中。

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

谢谢你

angularjs typescript jasmine karma-jasmine jasmine2.0
1个回答
0
投票

@PetrAveryanov有正确的答案。我想指出的是--除非在OP的Jasmine中进行了一些花哨的骆驼大小写检查,但在我的Jest副本中却没有--自从那篇帖子之后,模块的名字已经改成了 ngResource: beforeEach(angular.mock.module('ngResource'));

© www.soinside.com 2019 - 2024. All rights reserved.