类似于这个关于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?例如,如何使该片段injector.get(ProgressService)
与ts-mockito模拟兼容?
如果应该用另一个对象而不是类来模拟提供程序,则应使用useValue
或useFactory
。
对于茉莉花而言:
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
在真实的类实例或类原型上使用它们(或当前测试框架具有的对应方法)进行模拟。当一个类不是当前单元测试中要测试的类时,模拟/存根所有方法而不是其中的几种方法对于测试隔离是有益的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句