Javascript 如何在TypeScript中使用mocha模拟axios依赖关系?
这是我的示例src/main.ts文件Javascript 如何在TypeScript中使用mocha模拟axios依赖关系?,javascript,node.js,typescript,unit-testing,mocha.js,Javascript,Node.js,Typescript,Unit Testing,Mocha.js,这是我的示例src/main.ts文件 import axios from 'axios'; export async function main() { const URL = 'test url'; const secretKey = 'Test key' const response = await axios.get(URL, { headers: { 'Content-Type': 'application/json', 'KEY': se
import axios from 'axios';
export async function main() {
const URL = 'test url';
const secretKey = 'Test key'
const response = await axios.get(URL, {
headers: { 'Content-Type': 'application/json', 'KEY': secretKey },
});
我想使用mocha在spec/test.ts文件中编写测试用例。有人能告诉我如何为axios依赖项创建mock和stub吗。对于typestript中的mock/stub axios,我建议使用expect函数 下面是一个如何做到这一点的示例 request.ts
import axios from 'axios';
const apiConfig = {
returnRejectedPromiseOnError: true,
timeout: 30000,
headers: {
common: {
'Content-Type': 'application/json',
'Accept': 'application/json',
},
},
};
const request = axios.create(apiConfig);
export default request;
梅因酒店
import request from './request';
export const URL = 'https://httpbin.org/get';
export const secretKey = 'secret_key';
export async function main() {
const response = await request.get(URL, {
headers: {
KEY: secretKey,
},
});
// response logic
return response;
}
main.spec.ts
import MockAdapter from 'axios-mock-adapter';
import { expect } from 'chai';
import request from './request';
import { main, URL, secretKey } from './main';
describe('Request test', () => {
let stub: MockAdapter;
const receivedData = { data: 'data' };
before(() => {
stub = new MockAdapter(request);
stub.onGet(URL, {
headers: {
KEY: secretKey,
},
}).replyOnce(200, receivedData);
// replyOnce if you assume that your code sends a single request
});
it('test', async () => {
const response = await main();
expect(response.status).to.be.equal(200);
expect(response.data).to.be.deep.equal(receivedData);
});
after(() => {
stub.restore();
});
});
有帮助吗?没有,我想改用依赖注入和mocha。你需要一个类似的模拟/存根库。如果你不想使用任何额外的软件包。重构代码,如
function main(httpClient){}
而不是使用import
,然后您可以创建模拟的httpClient并将其传递给main
函数。