i'm using publishsubject along map operator:
@test public void testmapwithmultipleobservers() { publishsubject<integer> subject = publishsubject.create(); func1 action = spy(new func1<integer, integer>() { @override public integer call(integer integer) { return integer; } }); observable<integer> observable = subject.asobservable().map(action); observable.subscribe(mock(observer.class)); observable.subscribe(mock(observer.class)); subject.onnext(1); verify(action, times(2)).call(anyint()); // however, need times(1) } the desired behaviour perform action after subject produces value. i've tried dooneach,doonnext, map , in each case action performed each present observer (for 100 observers action performed 100 times), while need perform per emission.
could suggest anything?
thanks.
the quickest option use share()
observable<integer> observable = subject .map(action) .share(); you don't need asobservable() call. used return subject api , prevent caller casting subject. example:
observable<integer> getsubjectasobservable() { return subject.asobservable(); }
Comments
Post a Comment