我有一个简单的登录 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');
});
我研究并发现这篇文章与我的问题很接近。但在所有情况下,我都会收到 TypeError: Cannot read property 'baseUrl' of undefined
为什么这不能知道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
}