1
我正在创建一个简单的操作,以便使用Thunk从API获取一些数据。它看起来像这样:如何使用Jest和Sinon测试Thunk操作
import fetch from 'isomorphic-fetch';
function json(response) {
return response.json();
}
/**
* Fetches books from the server
*/
export function getBooks() {
return function(dispatch) {
fetch("http://localhost:1357/book", {mode: "cors"})
.then(json)
.then(function(data) {
dispatch({
type: "GET_BOOKS",
devices: data
});
});
}
};
应该叫fetch
一次。我已经证实它是这样做的,因为它在Web浏览器中调用时成功地提取数据。然而,当我写这篇文章的测试:
import fetch from 'isomorphic-fetch';
let spy = sinon.spy(fetch);
import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import {getBooks} from '../../actions/getBooks';
import sinon from 'sinon';
const middlewares = [ thunk ];
const mockStore = configureMockStore(middlewares);
describe('async actions',() => {
it('calls the server',() => {
const store = mockStore({books: []});
store.dispatch(getBooks());
expect(spy.callCount).toEqual(1);
spy.restore();
});
});
然而,这个测试失败,而spy
的呼叫次数为0。我怀疑这是由于获取由试验前的动作,这就是为什么要导入间谍是在文件的顶部创建的。但是,这不起作用。推荐使用fetch
进行测试的方法是什么?
感谢您的帮助!当我运行测试时,出现'不能读取属性'的错误,然后'未定义'。我假设这意味着商店没有定义,但我们确实定义了它。任何想法为什么发生这种情况? – user2367593
Nevermind - 我不得不改变代码来说'return fetch(localhost ...'而不是'fetch(localhost ...')。 – user2367593