Javascript 是否可以使用axios模拟适配器与onPost()进行部分数据匹配?
环境:Javascript 是否可以使用axios模拟适配器与onPost()进行部分数据匹配?,javascript,axios,axios-mock-adapter,Javascript,Axios,Axios Mock Adapter,环境: NodeJS 8.1.2 axios 0.16.2 axios-mock-adapter 1.9.0 测试后API调用使用如下: const expect = require('chai').expect const MockAdapter = require('axios-mock-adapter') // Bootstrapping const PlaceholderApp = { createComment: function (author, email, messag
NodeJS 8.1.2
axios 0.16.2
axios-mock-adapter 1.9.0
测试后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!
mockHttpClient.onPost(/(\/comments)/i, { email: 'authorA@test.com' }).reply(527) //This won't work. Would like to have something like this to work tho...
mockHttpClient.onAny().passThrough()
// Test cases
describe('PlaceholderApp.createComment', () => {
it("should fail due to mock...", (resolve) => {
PlaceholderApp.createComment('author A', 'authorA@test.com', 'test comment')
.then((res) => {
resolve()
})
.catch((err) => {
resolve(err)
})
})
})
我想知道是否有一种方法能够匹配部分
POST
数据?您可以捕获所有POST
请求到特定URL
,然后在reply
回调和passThrough
中手动匹配您的条件,如果条件不满足,我们可以在reply
回调中passThrough
,方法是将调用传递给originalAdapter
,就像在您的
注意
:如果提供的数据不同,您可以将多个完全匹配
数据与同一URL
进行匹配,但对于我们自己的部分匹配
实现,您不能向同一URL
和方法添加另一个请求,您必须添加逻辑以将所有通缉案例匹配到一个请求。因为v1.18.0版(2020年3月22日)支持不对称匹配
mockHttpClient.onPost(/(\/comments)/i, {
asymmetricMatch: (actual) => actual.email === 'authorA@test.com'
}).reply(527)
这实际上与我的想法有关,我的想法是为了解决这一障碍,但也有自己的问题……你所说的“匹配部分POST
数据”是什么意思?你想达到什么目的?我可以将我的模拟应用于“精确”匹配。在我的例子中:{name:'author A',email:'authorA@test.com,正文:“测试注释”}
。问题是,我是否能够应用通配符并说“对所有具有email==”的POST请求应用mock”authorA@test.com“
?
mockHttpClient.onPost(/(\/comments)/i, {
asymmetricMatch: (actual) => actual.email === 'authorA@test.com'
}).reply(527)