我正在尝试为我们的Backbone应用程序编写测试套件。我们使用Jest作为测试框架,使用Sinon进行服务器模拟。
示例测试类似于
device.test.js
describe('API integration', ()=>{
let response = {"data": {
"attributes": {
"created_at": "2018-06-14T07:05:14.919Z",
},
"id": "234",
"type": "device"
}};
let server = sinon.fakeServer.create();
afterAll(() => {
server.restore();
});
let device = new Device({
id: '234'
created_at: null,
agent_code: null,
device_code: null,
});
server.respondWith('GET',
'api/device/234',
[200, {"Content-Type": "application/json"},
JSON.stringify(response)]);
device.fetch();
server.respond();
it('fetches to the right URL', ()=>{
// these both pass
expect(server.requests[0].method === 'GET');
expect(server.requests[0].url === 'api/device/234');
});
it('updates its fields properly after a fetch', ()=>{
// this test fails
expect(device.get('created_at')).toBe(response.attributes.created_at);
});
});
我正在使用this article作为如何使用sinon测试骨干模型的示例(向falseserver一起滚动到底部使用)以及使用sinon fakeserver docs。
根据我读过的内容,server.respond()
应该评估所有异步请求,因此模型应该同步更新。也就是说,我的期望是在device
之后对server.respond
的任何引用应该指的是获取后device
模型。我的期望未得到满足 - 在致电server.respond()
后,device.get('created_at')
仍为undefined
。当我们的应用程序运行时,这不是生产中的情况。
以防万一,我试图将测试投放到{success: function(){}}
回调中,以及.then
和.done
,但测试不会运行,也不会console.log()
或任何其他调试工作。
如何使用Sinon.fakeServer在Jest中测试Backbone.model.fetch()
等异步方法?
parse
甚至被调用 - 也许我正在异常地构造我的返回数据。确实正在调用Parse,所以现在我怀疑这不是异步问题,而是我在response
对象中构造数据的方式。
答案 0 :(得分:0)
答案是我的模型的id
属性与API_MOCKS帮助文件中的响应对象的id
属性不匹配。它与asynch无关。