javascript - 如何在 TypeScript 中使用 mocha 模拟 axios 依赖?

标签 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': secretKey },
    });

我想使用 mocha 在 spec/test.ts 文件中编写我的测试用例。谁能告诉我如何为 axios 依赖创建模拟和 stub 。

最佳答案

对于 typestript 中的 mock/stub 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;

主要.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;
}

主要规范.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();
    });
});

关于javascript - 如何在 TypeScript 中使用 mocha 模拟 axios 依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63404316/

相关文章:

php - 去年项目就业网站

在 Maven 构建生命周期中集成最好的 JavaScript 测试

javascript 异步帮助 async.timesLimit

javascript - 如何使用 superagent 发送 FormData 对象

angular - 为什么 Angular 类型 "Routes"是可变的?

javascript - 显示数组中的 json 数据

javascript - 从 JSON 字符串中获取数据

javascript - jQuery 日期选择器突出显示范围循环

node.js - 使用 nodeJs 从 AWS SQS 队列中获取待处理的消息数

unit-testing - 单元测试由使用 angular2-jwt AuthHttp 调用而不是 http 调用的服务注入(inject)的组件