如何在 sinon 中存根 promise.all
How to stub promise.all in sinon
我有一个函数有 2 个 APi 调用。我正在解构响应并将每个响应发送到不同的函数以执行某些操作。我需要编写测试用例来进行 API 调用。获取响应并将其传递给相应的函数。
这是我的代码
async _fetchComponentDetails() {
const [firstResponse, secondResponse] = await Promise.all([
this._getfirstApiResponse(param1, param2),
this._getSecondApiResponse(param1, param2),
]);
this.formatFirstApiResult = await componentSerives.formatFirstResponseData(firstResponse);
this.formatSecondApiResult = await componentSerives.formatSecondResponseData(secondResponse);
}
这是我的服务电话
async _getfirstApiResponse(param1, param2) {
const url = 'api/firstApi';
const firstResponse = await componentSerives.fetchApiDetails(url, param1, param2);
return firstResponse;
}
async _getSecondApiResponse(param1, param2) {
const url = 'api/secondApi';
const secondResponse = await componentSerives.fetchApiDetails(url, param1, param2);
return secondResponse;
}
这是我写的测试用例
it('it should make make API calls for first and second',async () => {
sinon.stub(componentSerives, 'fetchApiDetails').resolves(bannerResponse);
});
我面临的问题是,我不知道如何在 resolves();
中发送第一个和第二个 APi 响应
将其作为对象数组传递,如下所示。我看到 firstResponse 和 secondResponse 加载到两个对象中。
[{firstResponse, secondResponse}]
你能帮我如何对 APi 进行存根并将其分配给解构中的不同响应吗?
你存错了,根据你自己的测试:
it('it should make make API calls for first and second',async () => {
如果您正在测试 fetchApiDetails
,则无法将该函数存根。这是没有意义的!然后你就可以测试你自己的存根了。
您需要存根或注入的是它的依赖项:_getfirstApiResponse
和 _getSecondApiResponse
。只需让它们解析一些值,就可以将它们存根:
const firstResponse = 42;
const secondResponse = -42;
sinon.replace(componentSerives, '_getfirstApiResponse', sinon.fake.resolves(firstResponse));
sinon.replace(componentSerives, '_getSecondApiResponse', sinon.fake.resolves(secondResponse ));
await componentSerives.fetchApiDetails();
assertEquals(componentSerives.formatFirstApiResult, "Result: 42");
assertEquals(componentSerives.formatSecondApiResult, "Result: -42");
我有一个函数有 2 个 APi 调用。我正在解构响应并将每个响应发送到不同的函数以执行某些操作。我需要编写测试用例来进行 API 调用。获取响应并将其传递给相应的函数。
这是我的代码
async _fetchComponentDetails() {
const [firstResponse, secondResponse] = await Promise.all([
this._getfirstApiResponse(param1, param2),
this._getSecondApiResponse(param1, param2),
]);
this.formatFirstApiResult = await componentSerives.formatFirstResponseData(firstResponse);
this.formatSecondApiResult = await componentSerives.formatSecondResponseData(secondResponse);
}
这是我的服务电话
async _getfirstApiResponse(param1, param2) {
const url = 'api/firstApi';
const firstResponse = await componentSerives.fetchApiDetails(url, param1, param2);
return firstResponse;
}
async _getSecondApiResponse(param1, param2) {
const url = 'api/secondApi';
const secondResponse = await componentSerives.fetchApiDetails(url, param1, param2);
return secondResponse;
}
这是我写的测试用例
it('it should make make API calls for first and second',async () => {
sinon.stub(componentSerives, 'fetchApiDetails').resolves(bannerResponse);
});
我面临的问题是,我不知道如何在 resolves();
中发送第一个和第二个 APi 响应将其作为对象数组传递,如下所示。我看到 firstResponse 和 secondResponse 加载到两个对象中。
[{firstResponse, secondResponse}]
你能帮我如何对 APi 进行存根并将其分配给解构中的不同响应吗?
你存错了,根据你自己的测试:
it('it should make make API calls for first and second',async () => {
如果您正在测试 fetchApiDetails
,则无法将该函数存根。这是没有意义的!然后你就可以测试你自己的存根了。
您需要存根或注入的是它的依赖项:_getfirstApiResponse
和 _getSecondApiResponse
。只需让它们解析一些值,就可以将它们存根:
const firstResponse = 42;
const secondResponse = -42;
sinon.replace(componentSerives, '_getfirstApiResponse', sinon.fake.resolves(firstResponse));
sinon.replace(componentSerives, '_getSecondApiResponse', sinon.fake.resolves(secondResponse ));
await componentSerives.fetchApiDetails();
assertEquals(componentSerives.formatFirstApiResult, "Result: 42");
assertEquals(componentSerives.formatSecondApiResult, "Result: -42");