簡體   English   中英

如何將ts-mockito注入Angular 4組件測試

[英]How to inject ts-mockito into Angular 4 component test

類似於有關typemoq注入的問題 ,如何將ts-mockito對象注入angular的TestBed.configureTestingModule() 我可以找到的任何示例ts-mockito測試都與角度無關。

考慮下面的最小工作示例進行測試-它包含一個ProgressComponent ,在我們要模擬的后端帶有一個ProgressService 該服務非常簡單:

import { Injectable } from '@angular/core';

@Injectable()
export class ProgressService {
    private currentState: string = '1';

    constructor() {
    }

    setCurrentState(state: string) {
        this.currentState = state;
    }

    getCurrentState(){
        return this.currentState
    }

}

為了在沒有ts-mockito情況下進行模擬,我們只需擴展該類。

import {ProgressService} from "../../../progress.service";

export class MockProgressService extends ProgressService{}

然后在測試ProgressComponent ,將MockProgressService傳遞到TestBed。

import {async, ComponentFixture, getTestBed, TestBed} from '@angular/core/testing'

import { ProgressComponent } from './progress.component'
import {ProgressService} from "../progress.service"
import {MockProgressService} from "../shared/services/progress/progress.mock";

describe('ProgressComponent', () => {
  let injector: TestBed
  let mockService: ProgressService
  let fixture: ComponentFixture<ProgressComponent>
  let component: ProgressComponent

  beforeEach(async() => {
    TestBed.configureTestingModule({
      declarations: [ ProgressComponent ],
      providers: [{provide: ProgressService, useClass: MockProgressService}]
    }).compileComponents()

    injector = getTestBed()
    fixture = TestBed.createComponent(ProgressComponent)
    component = fixture.componentInstance
    mockService = injector.get(ProgressService)

    fixture.detectChanges();
  });
});

角度測試框架通過TestBed引入了依賴項注入。 我們如何在Angle的測試設置中使用Mockito? 例如,如何使snippet injector.get(ProgressService)與ts-mockito模擬兼容?

如果應該用另一個對象而不是類來useValue提供程序,則應使用useValueuseFactory

對於茉莉花而言:

providers: [{
  provide: ProgressService,
  useValue: jasmine.createSpyObj('ProgressService', [...])
}]

對於ts​​-mockito,它可以是:

progressServiceMock = mock(ProgressService);
...
providers: [{provide: ProgressService, useValue: instance(progressServiceMock)}]

繼承模擬類frim原始類(例如class MockProgressService extends ProgressService通常沒有任何好處。 如果打算模擬某些方法,則可以在真實的類實例或類原型上使用jasmine.spy (或當前測試框架具有的對等物)來模擬它們。 當一個類不是當前單元測試中要測試的類時,模擬/存根所有方法而不是其中的幾種方法對於測試隔離是有益的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM