Stubbing Fetch Call - response.json 不会调用
Stubbing Fetch Call - response.json will not invoke
我正在尝试用 sinon 和 sinon-stub-promise
存根获取调用。我非常接近......但我不确定为什么它不调用我创建的 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
并保留了原生 sinon:
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;
});
更新
我让它与 sinon-stub-promise
配合使用 proxyquire 的全局属性:
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);
});
});
我正在尝试用 sinon 和 sinon-stub-promise
存根获取调用。我非常接近......但我不确定为什么它不调用我创建的 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
并保留了原生 sinon:
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;
});
更新
我让它与 sinon-stub-promise
配合使用 proxyquire 的全局属性:
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);
});
});