javascript - 如何在 TypeScript 中使用 mocha 模拟 axios 依赖项?
问题描述
这是我的示例 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': secretKey },
});
我想使用 mocha 在 spec/test.ts 文件中编写我的测试用例。有人可以告诉我如何为 axios 依赖项创建一个模拟和存根。
解决方案
对于 typestript 中的模拟/存根 axios,我推荐axios-mock-adapter,对于期望函数chai
这是如何执行此操作的示例
请求.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;
main.ts
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();
});
});
推荐阅读
- jquery - 为什么溢出不保持在底部?
- node.js - Mongoose 聚合查询返回空结果
- java - 合并多个 ByteBuf 时在 Netty 中选择 UnpooledByteBufAllocator 和 Pooled
- android - 当我在 Android Studio 中进行增量构建时,Firebase Crashlytics 崩溃并显示“缺少 Crashlytics 构建 ID”
- javascript - 按钮在 Vuejs 表单中始终处于禁用状态
- apache-kafka - auto.leader.rebalance.enable 属性的推荐值是多少
- arrays - 如何在VB.Net字节数组中的任意位置引用一系列字节
- reactjs - 如何在 React 中编辑输入?
- flutter - Flutter FutureBuilder 和 ListTile 创建
- mongodb - 使用 skip() 和 limit() 实现分页时检查是否有更多文档