我正在尝试测试向服务器发出请求的 React Flux 操作之一。
// AppActions.js
fetchMovies(date) {
this.dispatch(date);
request
.get('/api/movies')
.query(date)
.end((err, res) => {
if (!res.ok) {
this.actions.fetchMoviesFail(res.body);
} else {
this.actions.fetchMoviesSuccess(res.body);
}
});
}
在我的 Flux 商店测试中,我有如下内容:
// AppStore-test.js
it ('should successfully handle fetchMovies', () => {
var callback = sinon.spy();
var date = {
startDate: moment('2015-04-01').format('YYYY-MM-DD'),
endDate: moment('2015-04-15').format('YYYY-MM-DD')
};
AppActions.fetchMovies(date, callback);
requests[0].respond(200, { 'Content-Type': 'application/json' },
'[{ "id": 12, "comment": "Hey there" }]');
expect(callback.calledWith([{id: 12, comment: "Hey there"}])).to.be.ok;
});
这显然行不通,因为 fetchMovies
仅接受一个参数 - date
。这是我第一次使用sinon.js ,所以也许我错过了一些非常明显的东西?
我如何伪造这个异步请求并使其成功或失败,因为现在无论我做什么,它都永远不会解决 .end()
promise 。
最佳答案
您应该使用nock为此。
Nock 拦截来自您代码的所有 HTTP 请求,然后根据您的设置方式进行响应。 通过这种方式,您可以将模拟和 spy 事件降至最低限度,并将请求视为另一个实现细节。
您创建的 nock 范围会响应某些断言,因此您可以预期它已完成、错误或类似。
一个例子;
var nockScope = nock('http://localhost:8000').get('/api/movies').reply(200, 'OK')
expect(nockScope.isDone()).to.be.ok()
关于javascript - 如何将Sinon.js FakeXMLHttpRequest与superagent一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30653031/