簡體   English   中英

使用Karma / Jasmin在Angular 4中測試使用.next,.subscribe的簡單服務

[英]Testing a simple service that uses .next, .subscribe in Angular 4 using Karma / Jasmin

我的應用程式中有一項簡單的服務,就像這樣...

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()未被調用/運行。 如果有人能告訴我我要去哪里錯,我將不勝感激。

如果直接subscribe ,則需要一個BehaviorSubject ,它將返回已存儲的值。

因此,您可以將Subject更改為BehaviorSubject並訂閱它,它將起作用。

文件:

https://github.com/ReactiveX/rxjs/blob/master/doc/subject.md#behaviorsubject

暫無
暫無

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

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