Stubbing Fetch Call – response.json不会调用

我试图用sinon和sinon-stub-promise一个获取呼叫。 我非常接近…但我不知道为什么它不会调用我创build的response.json()方法。

 function toJSON(response) { console.log(response); return response.json(); } function init() { fetch(darkWeatherUrl) .then(toJSON) .then(computeHours) .then(sendAlerts) .catch((e) => { console.log('init error ' + e); }); } 

 describe('lifx alert test', ()=> { it('should run fetch', ()=> { var fetch = sinon.stub().returnsPromise(); var body = { "hourly": { data: [ { time: 1493413200, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 297.17 }, { time: 1493416800, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 296.89 }, { time: 1493420400, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 296.73 }, { time: 1493424000, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 296.31 } ] } }; function json() { return body; } var response = {}; response.json = json; fetch.resolves(response); var init = proxy('../index.js', {'node-fetch': fetch}); init(); fetch.should.have.been.called; }); }); 

  lifex alert test { json: [Function: json] } [ { time: 1493413200, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 297.17 }, { time: 1493416800, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 296.89 }, { time: 1493420400, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 296.73 }, { time: 1493424000, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 296.31 } ] init error TypeError: response.json is not a function â should run fetch 1 passing 

请参阅底部的更新

我删除了sinon-stub-promise and and and kept native native native native native native

 describe('lifx alert test', ()=> { var fetchStub; beforeEach(() => { fetchStub = sinon.stub(); }); it('should run fetch', ()=> { var body = { "hourly": { data: [ { time: 1493413200, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 297.17 }, { time: 1493416800, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 296.89 }, { time: 1493420400, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 296.73 }, { time: 1493424000, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 296.31 } ] } }; var response = { json: () => { return body } }; fetchStub.returns(Promise.resolve(response)); var init = proxy('../index.js', {'node-fetch': fetchStub}); init(); fetchStub.should.have.been.called; }); 

UPDATE

我使用proxyquire的全局属性来处理sinon-stub-promise

 describe('lifx alert test', ()=> { it('should run fetch', ()=> { var fetch = sinon.stub().returnsPromise(); var body = { "hourly": { data: [ { time: 1493413200, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 297.17 }, { time: 1493416800, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 296.89 }, { time: 1493420400, icon: 'clear-day', precipIntensity: 0, precipProbability: 0, ozone: 296.73 }, { time: 1493424000, icon: 'clear-day', precipIntensity: 0, precipProbability: 50, ozone: 296.31 } ] } }; var response = { json: () => { return body } }; fetch['@global'] = true; fetch.resolves(response); proxy('../index.js', {'node-fetch': fetch}); fetch.should.have.callCount(3); }); });