簡體   English   中英

如何進行同步測試或不共享存根服務?

[英]How can I do synchronous test or not sharing a stub service?

我有一些需要服務的測試。 我正在使用一個名為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(''); 
      }))
  );

如果你有任何疑問,我希望你的回答。

謝謝 :-)

你嘗試過使用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 */ }
}

暫無
暫無

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

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