describe('tap', function() it('does not create a subscription', function() local observable = Rx.Observable.create(error) expect(observable.tap).to_not.fail() end) it('runs the specified onNext function', function() local onNext = spy() local observable = Rx.Observable.create(function(observer) observer:onNext(1) observer:onCompleted() end):tap(onNext):subscribe() expect(onNext).to.equal({{1}}) end) it('calls onError if the onNext callback errors', function() local onNext = spy() local onError = spy() local observer = Rx.Observer.create(onNext, onError) Rx.Observable.of(1):tap(error):subscribe(observer) expect(#onNext).to.equal(0) expect(#onError).to.equal(1) end) it('runs the specified onError function', function() local onError = spy() local observable = Rx.Observable.create(function(observer) observer:onError('message') end):tap(_, onError):subscribe(_, function() end) expect(onError).to.equal({{'message'}}) end) it('calls onError if the onError callback errors', function() local onError = spy() Rx.Observable.throw():tap(nil, error):subscribe(nil, onError, nil) expect(#onError).to.equal(1) end) it('runs the specified onCompleted function', function() local onCompleted = spy() local observable = Rx.Observable.create(function(observer) observer:onCompleted() end):tap(_, _, onCompleted):subscribe() expect(#onCompleted).to.equal(1) end) it('calls onError if the onCompleted callback errors', function() local onError = spy() local onCompleted = spy() Rx.Observable.of(1):tap(nil, nil, error):subscribe(nil, onError, onCompleted) expect(#onCompleted).to.equal(0) expect(#onError).to.equal(1) end) end)