标签: axios-mock-adapter

您如何验证使用axios-mock-adapter发出请求?

我正在使用https://github.com/ctimmerm/axios-mock-adapter

我想知道如何验证端点是否被被测系统实际调用.

在这个例子中:

var axios = require('axios');
var MockAdapter = require('axios-mock-adapter');

// This sets the mock adapter on the default instance
var mock = new MockAdapter(axios);

// Mock any GET request to /users
// arguments for reply are (status, data, headers)
mock.onGet('/users').reply(200, {
  users: [
    { id: 1, name: 'John Smith' }
  ]
});
Run Code Online (Sandbox Code Playgroud)

我如何判断是否调用了'/ users'?

我正在寻找类似于你在Jest中可以做的事情:

expect(mockFunc).toHaveBeenCalledTimes(1)
Run Code Online (Sandbox Code Playgroud)

我意识到我可以在使用函数回复时使用一些自定义逻辑,并设置一个局部变量来指示是否已经发出请求.我只是想知道是否有更清洁的方法来做到这一点.

unit-testing axios axios-mock-adapter

11
推荐指数
2
解决办法
3317
查看次数

预期axios-mock-adapter出现错误

我正在尝试使用来测试axios get请求axios-mock-adapter,以便在状态不等于200的情况下引发错误。但是,当我执行测试时(请参阅参考资料api.test.js),我得到以下消息:

错误:expect(function).toThrowError(未定义)

预期函数抛出错误。但是它什么也没扔。

如何axios-mock-adapter使用gethandleResponse方法测试以确保引发了错误?谢谢!

api.test.js:

import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';

const handleResponse = (response) => {
  if (response.status !== 200) {
    throw new Error('foo');
  } else {
    return response.data;
  }
};

const get = async (url) => {
  const response = await axios.get(url, {withCredentials: true});
  return handleResponse(response);
};

test('testing that, when making a get request to the appropriate url, an error is thrown ' +
     ' …
Run Code Online (Sandbox Code Playgroud)

javascript jestjs axios axios-mock-adapter

11
推荐指数
1
解决办法
1098
查看次数

为什么我的api模拟程序返回404错误?

axios-mock-adapter用来模拟我的API,它可以正常工作,但是在一个模拟中它返回404错误,但我找不到原因。

还有这里与测试沙箱,你可以当我们运行测试看,第二次检查失败,因为axios POST电话已经无法模拟。我已经尝试删除标题部分,但是运行测试时沙箱崩溃了。


API的模拟(测试部分):

import axios from "axios";
import MockAdapter from 'axios-mock-adapter';
import Utils from "../Utils/Utils";

// Global variable for post request with axios
global.users_post = axios.create({
  baseURL: "http://localhost:5000/api/",
  headers: {'Content-Type': 'application/json'}
});

/* Mockup API */
var userMock = new MockAdapter(users_post);

const user_resp_full = {
  data: {
    first_name: "Test",
    last_name: "Test",
    email: "test@gmail.com",
    address: "Test",
    zipcode: 1010,
    city: "Test",
    admin: false
  }
}

const testAPI = () => {
    userMock
      .onPost("users", user_resp_full, Utils.getAuth()) …
Run Code Online (Sandbox Code Playgroud)

reactjs jestjs enzyme axios axios-mock-adapter

8
推荐指数
1
解决办法
2104
查看次数

Mock api来自Storybook

是否axios-mock-adapter只与提出的要求的工作axios

我编写了一个POST到API的组件(使用vanilla XHR,而不是axios).我在Storybook中测试它并希望拦截那些POST请求,因为端点还不存在:

import React from "react"
import { storiesOf } from "@kadira/storybook"
import MyComponent from "./MyComponent"
import axios from "axios"
import MockAdapter from "axios-mock-adapter"

var mock = new MockAdapter(axios)

storiesOf("My Component", module).addWithInfo(
  "Simulator",
  () => {
    mock.onPost().reply(500)
    return <MyComponent />
  },
  {}
)
Run Code Online (Sandbox Code Playgroud)

我的组件仍然试图命中API端点,我得到404响应 - 而不是预期的500响应.

是否axios-mock-adapter只与提出的要求的工作axios?是否mock调用都在里面MyComponent

谢谢.

mocking reactjs axios storybook axios-mock-adapter

7
推荐指数
2
解决办法
2676
查看次数

如何在 Axios Mock 适配器中使用路径参数

我正在使用 axios 模拟适配器来模拟我的反应前端的数据。目前我正在使用 param 并且它正在工作。但我需要支持它跟随网址

.../发票/1

这是我的代码

let mock;
if (process.env.REACT_APP_MOCK_ENABLED === 'true') {
console.log('Simulation mode is enabled ');
mock = new MockAdapter(axios);

mock
    .onGet(apiUrl + '/invoice').reply(
    (config) => {
        return [200, getMockInvoice(config.params)];
    })
    .onGet(apiUrl + '/invoices').reply(
    (config) => {
        return [200, getMockInvoices(config.params)];
    });
    }
Run Code Online (Sandbox Code Playgroud)
export const getInvoice = async (id) => {
console.log(id);
try {
    const invoiceResponse = await axios.get(apiUrl + `/invoice/${id}`);
    return invoiceResponse.data;
} catch (e) {
    console.log(e);
 }
};
Run Code Online (Sandbox Code Playgroud)
export const getMockInvoice = (params) => {
let …
Run Code Online (Sandbox Code Playgroud)

javascript testing axios axios-mock-adapter

7
推荐指数
1
解决办法
4406
查看次数

是否可以使用 axios-mock-adapter 与 onPost() 进行部分数据匹配?

环境:

NodeJS 8.1.2
axios 0.16.2
axios-mock-adapter 1.9.0
Run Code Online (Sandbox Code Playgroud)

使用JSONPlaceholder的测试 POST API 调用如下:

const expect = require('chai').expect
const MockAdapter = require('axios-mock-adapter')

// Bootstrapping

const PlaceholderApp = {
  createComment: function (author, email, message) {
    const options = {
      method: 'post',
      url: 'https://jsonplaceholder.typicode.com/comments',
      data: {
        name: author,
        email: email,
        body: message,
      }
    }
    return axios(options)
  }
}

// Mock Adapter

const mockHttpClient = new MockAdapter(axios, { delayResponse: 50 })
// mockHttpClient.onPost(/(\/comments)/i, { name: 'author A', email: 'authorA@test.com', body: 'test comment' }).reply(526) // WORKS! …
Run Code Online (Sandbox Code Playgroud)

javascript axios axios-mock-adapter

6
推荐指数
1
解决办法
6638
查看次数

为什么TypeError:axios.create不是函数?测试axios GET时

我正在尝试在React中测试我的axios API函数。

在这里发现了这个问题:我如何在笑话测试axios,它指向使用axios-mock-adapter

import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import chatbot from './chatbot';

describe('Chatbot', () => {
    it('returns data when sendMessage is called', done => {
        var mock = new MockAdapter(axios);
        const data = { response: true };
        mock.onGet('https://us-central1-hutoma-backend.cloudfunctions.net/chat').reply(200, data);

        chatbot.sendMessage(0, 'any').then(response => {
            expect(response).toEqual(data);
            done();
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

真正的功能:

/**
 * Retrieve all Akamai images
 * @param  {String} akamai Akamai url
 * @return {Thenable}      Resolved: Akamai images
 */
export const callGetAkamai = …
Run Code Online (Sandbox Code Playgroud)

testing unit-testing axios axios-mock-adapter

6
推荐指数
2
解决办法
3938
查看次数

测试 Axios 请求的标头

我正在使用 Mocha + Chai 和axios-mock-adapter来测试我的 axios 请求。它运行良好,但我不知道如何test headers通过 axios-mock-adapter来使用 axios 并确保AuthorizationContent-type是正确的!

export const uploadFile = (token: string, fileName: string, file: Buffer): Promise<string> => {
  return new Promise((resolve, reject): void => {
    const uploadFileURL = `xxxxx.com`;
    axios
      .put(uploadFileURL, file, {
        headers: {
          Authorization: `Bearer ${token}`,
          "Content-type": "application/x-www-form-urlencoded",
        },
      })
      .then((response): void => {
        resolve(response.data.id);
      })
      .catch((error: Error): void => {
        reject(error.message);
      });
  });
};
Run Code Online (Sandbox Code Playgroud)

这是我的测试功能

  describe("uploadFile", (): void => {
    let mockAxios: MockAdapter; …
Run Code Online (Sandbox Code Playgroud)

javascript node.js axios axios-mock-adapter

6
推荐指数
1
解决办法
3823
查看次数

使用 JEST 和 axios-mock-adapter 测试基于 axios 的 API 时如何解决“无法验证第一个证书”?

我正在使用Jestaxios-mock-adapter为我的 API 服务编写测试。问题是,当我运行测试时,我收到一条错误消息:

错误:无法验证第一个证书。

app.service.js 以下是

import ApiService from '@/services/api.service'

export default {
  async loadDashboard (psRef) {
    let result = await ApiService.get('user/' + psRef + '/dashboard')
      .catch(error => {
        console.error(error)
      })
    return result.data
  }
}
Run Code Online (Sandbox Code Playgroud)

api.service.js是我axios像这样创建实例的地方

import Axios from 'axios'

const baseDomain = process.env.VUE_APP_BACKEND
const baseURL = `${baseDomain}${process.env.VUE_APP_API}`

export default Axios.create({
  baseURL: baseURL,
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  }
})
Run Code Online (Sandbox Code Playgroud)

测试如下:

const baseDomain = process.env.VUE_APP_BACKEND
const baseURL = `${baseDomain}${process.env.VUE_APP_API}`

test('loadDashboard should return …
Run Code Online (Sandbox Code Playgroud)

unit-testing jestjs axios axios-mock-adapter

5
推荐指数
0
解决办法
462
查看次数

我如何使用 vitest 对 axios.create 模拟进行单元测试?

我正在使用 typescript 在 vue 中学习单元测试,我想测试这个功能

\n
const getCLients =async (): Promise<Client[]> => {\n        const {data} = await clientsApi.get('/clients')\n        return data\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但由于clientsApi,我遇到了错误。我的客户端 api 是 aun axios 实例,如下所示:

\n
import axios from 'axios'\n\nconst clientsApi = axios.create({\n   baseURL:import.meta.env.VITE_API_URL\n})\nexport default clientsApi\n
Run Code Online (Sandbox Code Playgroud)\n

我的错误是这样的:

\n
\n

类型错误:无法读取未定义的属性(读取“get”)\n\xe2\x9d\xaf getCLients ../src/clients/composables/useClients.ts:14:41

\n
\n
\n

14| const {data} = 等待clientsApi.get('/clients')

\n
\n

在我的测试中,我完成了 axios 模拟:

\n
vi.mock('axios')\nconst mockedAxios = axios as jest.Mocked<typeof axios>;\n\nmockedAxios.get.mockResolvedValue({\n            data: mockClients,\n})\n
Run Code Online (Sandbox Code Playgroud)\n

我以为我必须模拟 axios.create 但我尝试了很多方法,但我总是遇到相同的打字错误。我需要你的帮助,你该如何解决这个问题?

\n

typescript axios axios-mock-adapter vuejs3 vitest

5
推荐指数
1
解决办法
3259
查看次数