首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在构造函数中使用@Inject()为Angular 7服务准备测试

如何在构造函数中使用@Inject()为Angular 7服务准备测试
EN

Stack Overflow用户
提问于 2019-11-26 18:26:22
回答 1查看 69关注 0票数 0

我有一个Angular 7服务

代码语言:javascript
复制
@Injectable({
  providedIn: 'root'
})
export class ClaimsService {
  lookupSplitter: KeyValuePair;

  constructor(
    @Inject(API_CLAIMS_BASE_URL) private apiClaimsBaseUrl: string,
    @Inject(LOOKUP_SPLIT_KEY_VALUE) lookupSplitKeyValueConst: KeyValuePair,
    private httpClient: HttpClient,
    private log: LogService
  ) {
    this.lookupSplitter = lookupSplitKeyValueConst;
  }

  ...
}

我正在尝试创建一个单元测试:

代码语言:javascript
复制
import { HttpClientModule } from '@angular/common/http';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { TestBed } from '@angular/core/testing';
import { LogService } from '@app/core/logging/services/log.service';
import { instance, mock } from 'ts-mockito';
import { ClaimsService } from './claims.service';

describe('ClaimsService', () => {
  const mockLogService = mock(LogService);
  beforeEach(() =>
    TestBed.configureTestingModule({
      imports: [HttpClientModule, HttpClientTestingModule],
      providers: [ClaimsService, { provide: LogService, useFactory: () => instance(mockLogService) }]
    })
  );

  it('should be created', () => {
    const service: ClaimsService = TestBed.get(ClaimsService);
    expect(service).toBeTruthy();
  });
});

这给了我一个错误:

代码语言:javascript
复制
Error: StaticInjectorError(DynamicTestModule)[InjectionToken API_CLAIMS_BASE_URL]: 
  StaticInjectorError(Platform: core)[InjectionToken API_CLAIMS_BASE_URL]: 
    NullInjectorError: No provider for InjectionToken API_CLAIMS_BASE_URL!

我不确定我是如何在试验床上设置的。有人能帮帮忙吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-26 18:40:32

一位大学生帮我解决了这个问题:

代码语言:javascript
复制
import { HttpClientModule } from '@angular/common/http';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { TestBed } from '@angular/core/testing';
import { API_CLAIMS_BASE_URL, LOOKUP_SPLIT_KEY_VALUE } from '@app/app-injection-token';
import { LogService } from '@app/core/logging/services/log.service';
import { KeyValuePair } from '@app/core/models/key-value-pair';
import { environment } from '@environments/environment';
import { instance, mock } from 'ts-mockito';
import { ClaimsService } from './claims.service';

describe('ClaimsService', () => {
  const mockLogService = mock(LogService);
  const lookupSplitKeyValueConst: KeyValuePair = new KeyValuePair('key', 'value');
  beforeEach(() =>
    TestBed.configureTestingModule({
      imports: [HttpClientModule, HttpClientTestingModule],
      providers: [
        ClaimsService,
        { provide: LogService, useFactory: () => instance(mockLogService) },
        { provide: API_CLAIMS_BASE_URL, useValue: environment.claimsServiceURL },
        { provide: LOOKUP_SPLIT_KEY_VALUE, useValue: lookupSplitKeyValueConst }
      ]
    })
  );

  it('should be created', () => {
    const service: ClaimsService = TestBed.get(ClaimsService);
    expect(service).toBeTruthy();
  });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59048761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档