Существует ли путь в JMockit для вызова исходного метода из дразнившего метода?

Правильный способ превратить ваше компонентное событие в наблюдаемое, по-видимому, с помощью Subject. Но вы можете переместить вызов next в шаблон. См. Оператор RxJS fromEvent с выходным EventEmitter в Angular

Я изменил несколько вещей в вашем app.component:

  • Я переместил subject.next в шаблон и подписка onFetch2 впоследствии на ngInit
  • Чтобы отписаться, я бы использовал шаблон takeUntil-destroy.
  • Вам не нужно использовать tap, если вы подписываетесь на одну и ту же точку в вашем приложении, просто выполните действия в subscribe

Относительно оптимального использования switchMap I Я не совсем уверен, что вы ищете. Просто поместите switchMap в pipe там, где вам это нужно. Вы используете switchMap правильно.

https://stackblitz.com/edit/zaggi-angular-switchmap-stackoverflow-6o2d9e



import { Component, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';
import { DataService } from './data.service';
import { Subject, Subscription, fromEvent } from 'rxjs';
import { switchMap, map, tap, takeUntil } from 'rxjs/operators';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit, OnDestroy {
  public onFetch2$ = new Subject();
  private destroy$ = new Subject();

  public data = 0;

  constructor(private _ds: DataService) { }

  public ngOnInit() {
    this.onFetch2$.pipe(
      switchMap(p => this._ds.getData()),
      takeUntil(this.destroy$) // use takeUntil to unsubscribe
    ).subscribe(res => { // if you subscribe anyway you don't have to use tap
      this.data = res;
      console.log('<<< observable ', res)
    });
  }

  public ngOnDestroy() {
    this.destroy$.next();
    this.destroy$.complete();
  }

  public onFetch1(ev) {
    // if getData is a HttpClient call you don't have to unsubscribe as they complete automatically
    this._ds.getData().subscribe(res => {
      this.data = res;
      console.log('<<<', res); // <-- logs 10 times upon quick click succession
    });
  }
}

6
задан Eric Asberry 11 December 2008 в 16:12
поделиться

2 ответа

Я думаю, что можно сделать это с @Mock аннотация. Из документов, @Mock(reentrant=true) на Вашем ложном классе должен сделать это.

См. http://jmockit.googlecode.com/svn/trunk/www/javadoc/mockit/Mock.html
Поскольку пример смотрит здесь http://jmockit.googlecode.com/svn/trunk/www/tutorial/StateBasedTesting.html#reentrant

Я не протестировал это хотя..

8
ответ дан 8 December 2019 в 13:03
поделиться

Вместо того, чтобы добавить фиктивный объект Вы могли также разделить объект на подклассы, Вы хотите протестировать и переопределить методы, которые должны возвратить специальные значения.

Например:

RealClass toTest = new RealClass(){
      public String foo(){
          return "special value";
      }
}

//use toTest in test

Путем хранения этого определения в тесте это также ясно для других, какие методы 'дразнят'.

1
ответ дан 8 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: