2016-10-10 24 views
3

我有幾個需要服務的測試。我正在使用名爲UserServiceStub的存根服務,我在我正在測試的SettingsComponent中注入。我重置了每個測試中的UserServiceStub,但是測試是異步執行的,所以當我重置我的UserServiceStub(這是一個注入類和單例類)時,其他測試已經初始化它。我的測試是弱的,並聲稱是錯誤:-(如何做同步測試或不共享存根服務?

我願做同步測試或每個測試不同的UserServiceStub實例,但我不知道該怎麼做...

我試着要定義在UserServiceStub的方法稱爲reset()一個重置存根服務,但由於它的異步它不工作而且,我在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(''); 
     })) 
); 

我希望你的回答,如果你有任何問題只是問。

感謝:-)

回答

0

您是否嘗試過使用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 */ } 
} 
+0

謝謝你,但它不是我所需要的。每個'user'在每個測試中都有不同的信息,但是當測試完成時,UserServiceStub保存最新測試的信息,並且在執行測試時,在其他測試中,UserServiceStub發生了變化,我需要每個測試都有一個不同的UserServiceStub。我希望你明白。 –