【发布时间】:2017-09-16 02:34:59
【问题描述】:
我正在使用jest 来测试一个redux-observable 史诗,它派生了一个使用Observable.fromEvent 创建的内部可观察对象,并在发出动作之前监听特定的按键。
我正在努力测试内部 Observable 何时没有收到此特定按键,因此不会发出操作。
使用 jest,以下超时:
import { Observable, Subject } from 'rxjs'
import { ActionsObservable } from 'redux-observable'
import keycode from 'keycode'
const closeOnEscKeyEpic = action$ =>
action$.ofType('LISTEN_FOR_ESC').switchMapTo(
Observable.fromEvent(document, 'keyup')
.first(event => keycode(event) === 'esc')
.mapTo({ type: 'ESC_PRESSED' })
)
const testEpic = ({ setup, test, expect }) =>
new Promise(resolve => {
const input$ = new Subject()
setup(new ActionsObservable(input$))
.toArray()
.subscribe(resolve)
test(input$)
}).then(expect)
// This times out
it('no action emitted if esc key is not pressed', () => {
expect.assertions(1)
return testEpic({
setup: input$ => closeOnEscKeyEpic(input$),
test: input$ => {
// start listening
input$.next({ type: 'LISTEN_FOR_ESC' })
// press the wrong keys
const event = new KeyboardEvent('keyup', {
keyCode: keycode('p'),
})
const event2 = new KeyboardEvent('keyup', {
keyCode: keycode('1'),
})
global.document.dispatchEvent(event)
global.document.dispatchEvent(event2)
// end test
input$.complete()
},
expect: actions => {
expect(actions).toEqual([])
},
})
})
我的期望是调用input$.complete() 会导致testEpic 中的promise 得到解决,但对于这个测试它不会。
我觉得我错过了什么。有谁知道为什么这不起作用?
【问题讨论】:
标签: rxjs jestjs redux-observable