gpt4 book ai didi

javascript - 带有 HTTP 请求的单元测试返回 Promise { }

转载 作者:行者123 更新时间:2023-11-30 19:50:20 24 4
gpt4 key购买 nike

我正在使用 axios 模拟适配器模拟 HTTP 请求来测试我的功能。在我为函数定义了行为之后,然后我创建了一个类的实例来调用该函数,结果是

**Promise { <pending> }**, 

问题是什么?如何返回我定义的值?

这是我的代码:

UserService.js

export default class UserService {
getUserInfo = userId => {
const params = {
userId,
};

return axios
.get('https://www.usefortesting.com', {
params: { userId: params },
})
.then(response => response.data.userInfo)
.catch(error => error);
};
}

UserService.test.js

import React from 'react';
import axios from 'axios';
import UserService from './UserService';
import MockAdapter from 'axios-mock-adapter';

describe('testing', () => {
let axiosMock;
const Info = {
userInfo: {
id: '123',
name: 'omg',
},
};
beforeEach(function() {
axiosMock = new MockAdapter(axios);
});

afterEach(() => {
axiosMock.reset();
axiosMock.restore();
});

it('testing', () => {
axiosMock
.onGet('https://www.usefortesting.com', {
params: { userId: 'user_1' },
})
.reply(200, Info);
let userService = new UserService();
let response = userService.getUserInfo('user_1');
console.log(response);
});
});

最佳答案

您需要在测试中等待响应。使用回调或异步/等待,如下所示。
你的测试应该是这样的:

it('testing', async () => {  // notice async here
axiosMock
.onGet('https://www.usefortesting.com', {
params: { userId: 'user_1' },
})
.reply(200, Info);
let userService = new UserService();
let response = await userService.getUserInfo('user_1'); // notice await here
console.log(response);
});

it('testing', () => {
...
userService.getUserInfo('user_1').then(response => {
console.log(response);
});
});

可以查看this link有关更多示例的笑话文档。


您的 getUserInfo() 方法也有错误,在参数中您正在为 userId 传递一个对象,但您需要传递字符串或整数。你应该做的是:

return axios.get('https://www.usefortesting.com', {
params: { userId: params.userId },
})...

return axios.get('https://www.usefortesting.com', {
params,
})...

关于javascript - 带有 HTTP 请求的单元测试返回 Promise { <pending> },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54552125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com