我有一个简单的登录api调用,其中基本URL位于配置文件中,下面的代码
api.js
export const login = (username, password) => {
Axios.post(`${config.loginApi.baseUrl}/login`, {
username,
password
})
.then(res => res)
.catch(e => e);
};
我在下面编写了测试用例,
api.test.js
import axios from 'axios';
import { login } from './api';
import MockAdapter from 'axios-mock-adapter';
import config from 'config';
describe('signin signup Api', () => {
afterEach(() => {
jest.restoreAllMocks();
});
it('logs in successfully', (done) => {
const mock = new MockAdapter(axios);
mock.onGet(`${config.loginApi.baseUrl}/login`).reply(200, { data: '1234abcd' });
login('dee@gmail.com', 'test').then((res)=>{
expect(res).toEqual('1234abcd');
done();
});
});
或我之前编写的另一个测试用例
import axios from 'axios';
import { login } from './api';
import config from 'config';
jest.mock('axios');
it('logs in successfully', async () => {
axios.post.mockImplementationOnce(() => Promise.resolve({ data: '1234abcd' }));
await expect(login('dee@gmail.com', 'test')).resolves.toEqual('1234abcd');
});
我进行了研究,发现 this post 与我的问题接近。但是在所有情况下 TypeError:无法读取未定义的属性“ baseUrl”
为什么它不知道baseUrl?
我尝试模拟配置,
jest.mock(config);
得到TypeError:moduleName.split不是一个函数。
请提出修正/解决方法。
添加有关配置的更多信息
我在配置文件夹中
require('dotenv').config();
module.exports = config;
在开发环境中,它将从dev.js,prod-prod.js等中选择此配置
在我拥有的dev.js文件的公用文件夹中
loginApi: {
baseUrl: 'https://abcd.com',
mocks: true,
mockDelay: 2000
}
答案 0 :(得分:0)
我找到了解决此问题的方法,
在setupTests.js中,我添加了
global.config ={
loginApi: {
baseUrl: 'https://abcd.com',
mocks: true,
mockDelay: 2000
}
}
此修复了TypeError:无法读取未定义问题的属性'baseUrl'。