【发布时间】:2017-03-27 06:21:27
【问题描述】:
假设我有一个返回用户详细信息的 API:
/api/get_user/1
{
"status": 200,
"data": {
"username": "username1",
"email": "username@email.com"
}
}
还有一个像这样的“主要功能”:
function main (sources) {
const request$ = sources.ACTIONS
.filter(action => action.type === 'GET_USER_REQUEST')
.map(action => action.payload)
.map(payload => ({
category: 'GET_USER_REQUEST',
url: `${BASE_URL}/api/get_user/${payload.userId}`,
method: 'GET'
}))
const action$ = sources.HTTP
.select('GET_USER_REQUEST')
.flatten()
.map(response => response.data)
const sinks = {
HTTP: request$,
LOG: action$
}
return sinks
}
为了测试“ACTION”源,我可以简单地制作一个 xstream observable
test.cb('Test main function', t => {
const actionStream$ = xs.of({
type: 'GET_USER_REQUEST',
payload: { userId: 1 }
})
const sources = { ACTION: actionStream$ }
const expectedResult = {
category: 'GET_USER_REQUEST',
url: `${BASE_URL}/api/get_user/${payload.userId}`,
method: 'GET'
}
main(sources).HTTP.addEventListener({
next: (data) => {
t.deepEqual(data, expectedResult)
},
error: (error) => {
t.fail(error)
},
complete: () => {
t.end()
}
})
})
问题是。是否可以做同样的事情(使用plan xstream observable) 在没有像 nock 这样的助手的情况下测试 cycle-http 驱动程序? 或者有没有更好的方法来测试这样的东西?
【问题讨论】: