基本上这是我的反应代码
getDetails: function () {
var apiUrl = ConfigStore.get('api')
request
.get(apiUrl)
.set('X-Auth-Token', AuthStore.jwt)
.set('Accept', 'application/json')
.end(function (err, response) {
if (!err) {
if(response.text.indexOf("string") > -1){
this.dispatch('COMMAND1', response);
}
else {
this.dispatch('COMMAND2', response.body.options);
}
}
else {
this.dispatch('COMMAND3', response && response.body);
}
}.bind(this));
}
我为COMMAND1
it('Getting Latest Details', () => {
let eventSpy = sinon.spy();
require('superagent').__setMockResponse({
body: {
firstName: 'blah',
lastName: 'm ',
username: 'blah',
text: {
text : jest.fn()
}
}
});
let dispatchListener = AppDispatcher.register((payload) => {
if (payload.action.type === 'COMMAND1') {
eventSpy(payload.action.payload);
}
});
AuthStore.loggedIn = jest.genMockFunction().mockReturnValue(true);
AuthStore.getToken = jest.genMockFunction().mockReturnValue('545r5e45er4e5r.erereere');
MedsAlertsActions.getDetails();
expect(eventSpy.called).toBe(true);
dispatch('COMMAND1', data);
AppDispatcher.unregister(dispatchListener);
});
当我跑步时
npm test myfile.test
我正在
TypeError: Cannot read property 'indexOf' of undefined
indexOf
响应放入我的body
?如何解决类型错误command2
和command3
的测试用例。答案 0 :(得分:1)
我可以看到你正在使用 sinon 。您可以在其中创建一个沙箱和一个虚假服务器,它返回每个测试用例的预期响应。像这样的东西,例如:
describe('your test suite', () => {
let sandbox;
let server;
beforeAll(() => {
sandbox = sinon.sandbox.create();
server = sandbox.useFakeServer();
});
it('Calls COMMAND1', () => {
//Sinon takes some ms to respond, so you have to use a setTimeout
setTimeout(
() => server.respond([200, { 'Content-Type': 'text/html' }, 'some string']),
0
);
// Put here your assertions
});
});
您可以在需要时使用server.restore()
和sandbox.restore()
清除每一个。此外,您还可以访问使用sandbox.requests
这是一篇很棒的帖子,可以帮到你:https://medium.com/@srph/axios-easily-test-requests-f04caf49e057,它是关于axios的,但你可以用同样的方式实现它。
此外,您可以在沙盒的官方sinon文档中了解更多信息:http://sinonjs.org/releases/v1.17.7/sandbox