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)