我在我的應用程序,像這樣有一個簡單的服務...測試一個簡單的服務使用。接下來,在角4 .subscribe使用噶/茉莉花
import {Injectable} from '@angular/core';
import {Observable} from 'rxjs/Observable';
import {Subject} from 'rxjs/Subject';
@Injectable()
export class WizardDialogNavigationService {
public navAction$: Observable<any>;
private navActionSubject: Subject<any> = new Subject();
constructor() {
this.navAction$ = this.navActionSubject.asObservable();
}
public navAction(action: string): void {
this.navActionSubject.next(action);
}
}
這不是最複雜的服務,它只是允許我在組件之間進行通信。現在我需要測試它,我不得不承認我對測試知之甚少。我只是想檢查,當WizardDialogNavigationService.navAction
被稱爲navAction$
可觀察包含傳遞的字符串,所以我寫了下面......
import {TestBed, inject, async} from '@angular/core/testing';
import {Observable} from 'rxjs/Rx';
import {expect} from 'chai';
import * as sinon from 'sinon';
import {WizardDialogNavigationService} from './wizard-dialog-navigation.service';
describe('WizardDialogNavigationService',() => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [WizardDialogNavigationService]
});
})
describe('navAction$ Observable',() => {
let sut: WizardDialogNavigationService; // sut = Service Under Test
beforeEach(inject([WizardDialogNavigationService], (service: WizardDialogNavigationService) => {
sut = service;
}));
it('should be the last passed value', async(() => {
const resultList = [];
sut.navAction('TestString');
sut.navAction$.subscribe((result) => resultList.push(result));
console.log(resultList); // output is []
expect(resultList.indexOf('TestString')).to.equal(0);
}));
});
});
我想我要對這個錯誤的resultList陣列不包含通過價值?就好像.next() .subscribe()
沒有被調用/運行。如果有人能告訴我,我錯了我將不勝感激。
的'Observable'將不執行'subscribe'with的最後一個值,因爲它是熱的。您是否嘗試訂閱「主題」本身? – Dinistro
我也嘗試太通過使'navActionSubject'public然後訂閱,在測試'sut.navActionSubject.subscribe((結果)=>執行console.log(結果));'這有沒有輸出要麼... –