我设法解决了它。感谢@anoop,因为他的回答很有帮助,但我不得不通过一个主要的解决方法来管理它。我正在使用jsdom,它目前不支持localStorage
. 我在我的 jsdom 配置中添加了一个假的。
if (!global.window.localStorage) {
global.window.localStorage = {
getItem() { return '{}'; },
setItem() {}
};
}
并断言:
it('should fetch from local storage', () => {
const props = {
currentUser: 'UMAIR',
user: {
is_key: false
}
};
const spy = sinon.spy(global.window.localStorage, "setItem");
spy(props);
expect(spy.calledWith( {
currentUser: 'UMAIR',
user: {
is_key: false
}
}));
spy.restore();
const stub = sinon.stub(global.window.localStorage, 'getItem');
stub(props);
expect(stub.calledWith(Object.keys(props)));
// stub.restore();
});
另请参阅:
如何在 JavaScript 单元测试中模拟 localStorage?
https://github.com/gor181/webpack-react-babel-mocha-boilerplate/tree/master/test/utils
一周前我还发现了一个与此相关的内部问题,Sinon
但已解决。
见:https ://github.com/sinonjs/sinon/issues/1129
希望这可以帮助某人。