我正在使用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)
我意识到我可以在使用函数回复时使用一些自定义逻辑,并设置一个局部变量来指示是否已经发出请求.我只是想知道是否有更清洁的方法来做到这一点.
我正在尝试使用来测试axios get请求axios-mock-adapter,以便在状态不等于200的情况下引发错误。但是,当我执行测试时(请参阅参考资料api.test.js),我得到以下消息:
错误:expect(function).toThrowError(未定义)
预期函数抛出错误。但是它什么也没扔。
如何axios-mock-adapter使用get和handleResponse方法测试以确保引发了错误?谢谢!
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) 我axios-mock-adapter用来模拟我的API,它可以正常工作,但是在一个模拟中它返回404错误,但我找不到原因。
还有这里与测试沙箱,你可以当我们运行测试看,第二次检查失败,因为axios POST电话已经无法模拟。我已经尝试删除标题部分,但是运行测试时沙箱崩溃了。
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) 是否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?
谢谢.
我正在使用 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) 环境:
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) 我正在尝试在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) 我正在使用 Mocha + Chai 和axios-mock-adapter来测试我的 axios 请求。它运行良好,但我不知道如何test headers通过 axios-mock-adapter来使用 axios 并确保Authorization它Content-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) 我正在使用Jest并axios-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) 我正在使用 typescript 在 vue 中学习单元测试,我想测试这个功能
\nconst getCLients =async (): Promise<Client[]> => {\n const {data} = await clientsApi.get('/clients')\n return data\n}\nRun Code Online (Sandbox Code Playgroud)\n但由于clientsApi,我遇到了错误。我的客户端 api 是 aun axios 实例,如下所示:
\nimport axios from 'axios'\n\nconst clientsApi = axios.create({\n baseURL:import.meta.env.VITE_API_URL\n})\nexport default clientsApi\nRun Code Online (Sandbox Code Playgroud)\n我的错误是这样的:
\n\n\n类型错误:无法读取未定义的属性(读取“get”)\n\xe2\x9d\xaf getCLients ../src/clients/composables/useClients.ts:14:41
\n
\n\n14| const {data} = 等待clientsApi.get('/clients')
\n
在我的测试中,我完成了 axios 模拟:
\nvi.mock('axios')\nconst mockedAxios = axios as jest.Mocked<typeof axios>;\n\nmockedAxios.get.mockResolvedValue({\n data: mockClients,\n})\nRun Code Online (Sandbox Code Playgroud)\n我以为我必须模拟 axios.create 但我尝试了很多方法,但我总是遇到相同的打字错误。我需要你的帮助,你该如何解决这个问题?
\naxios ×10
javascript ×4
jestjs ×3
unit-testing ×3
reactjs ×2
testing ×2
enzyme ×1
mocking ×1
node.js ×1
storybook ×1
typescript ×1
vitest ×1
vuejs3 ×1