我有一些测试需要服务。我正在使用一个名为 UserServiceStub
的 stub 服务,我将其注入(inject)到我正在测试的 SettingsComponent
中。我在每个测试中都重置了 UserServiceStub,但是,测试是异步执行的,所以当我重置我的 UserServiceStub(这是一个可注入(inject)的单例类)时,其他测试已经初始化了它。我的测试很弱并且断言是错误的:-(
我想为每个测试做同步测试或不同的 UserServiceStub 实例,但我不知道该怎么做......
我试图在 UserServiceStub 中定义一个名为 reset()
的方法来重置 stub 服务,但因为它是异步的,所以它不起作用。另外,我在 afterEach()
方法中执行了 TestBed.resetTestEnvironment()
方法,但它也不起作用。
我的reset()
方法:
reset() {
this.user = { IBAN: '', SWIFT: '', paypal: '', app_idioma: '' };
}
- 我正在使用的属性称为
user
,它已被其他测试覆盖
我的beforeEach()
方法就是这个
let fixture: ComponentFixture<SettingsComponent>;
let settingsComponent: SettingsComponent;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [SettingsComponent],
imports: [],
providers: [
TranslateService,
AppService,
{ provide: MockBackend, useClass: MockBackend },
{ provide: HttpToolsService, useValue: HttpToolsServiceStub },
{ provide: BaseRequestOptions, useClass: BaseRequestOptions },
{ provide: UserService, useClass: UserServiceStub } // My stub UserService
]
});
fixture = TestBed.createComponent(SettingsComponent);
settingsComponent = fixture.componentInstance;
});
一个测试:
it('#updateSettings should doesn\'t update the user\'s settings when is wrong', fakeAsync(
inject([UserService, HttpToolsService, MockBackend],
(userService: UserServiceStub, httpToolsService: HttpToolsService, mockBackend: MockBackend) => {
userService.reset(); // It does not work...
userService.isError = true;
// However, I have reseted my user in UserServiceStub,
// this returns false because settingsComponent.getSettings().IBAN is actually 'XXX'
// instead of '' (empty) how it has to be
expect(settingsComponent.getSettings().IBAN).toBe('');
}))
);
我希望你的答案,如果你有任何问题,尽管问。
谢谢:-)
最佳答案
您尝试过使用 getter/setter 吗?这样 UserServiceStub.user
的值将不会被修改(如果我理解正确的话)。
class UserServiceStub {
// instead of:
// this.user = { IBAN: '', SWIFT: '', paypal: '', app_idioma: '' };
// use:
get user() { return { IBAN: '', SWIFT: '', paypal: '', app_idioma: '' }; }
set user(value) { /* test something here */ }
}
关于unit-testing - 如何进行同步测试或不共享 stub 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39961133/