首页 > 解决方案 > Testcafe对端点的多个请求同步不起作用

问题描述

目前我正在设置 testcafe,并且在向同一端点发出请求时遇到了障碍。

这是一个身份验证请求。目前的步骤是:

  1. 初始请求被发送到以正文响应的服务器。这是等待
  2. 一旦从步骤 1 中检索到步骤,它就会发生变异并发送回服务器。
  3. 然后我们使用相同的端点并传入步骤 2 中生成的主体

但是我在 testcafe 测试中遇到问题,因为它总是使用第一个请求并返回两次。

我在 testcafe https://github.com/DevExpress/testcafe/issues/2477 上提到了这个问题,但是这不起作用。

const mock = (mockResponse, status) => {

  return RequestMock()
      .onRequestTo(/\/apitest\/authenticate\)
      .respond(mockResponse, status, {
        "Access-Control-Allow-Origin": "http://localhost:3000",
        "Access-Control-Allow-Credentials": "true"
      });
};


const mock1 = mock(RESPONSE1, 200);
const mock2 = mock(RESPONSE2, 200);

test.requestHooks(mock1)(
  "Should redirect to error if user has been suspended after submitting",
  async t => {
    const usernameInput = Selector("#username");
    const mobileDigitOne = Selector("#mobile-digit-0");
    const mobileDigitTwo = Selector("#mobile-digit-1");
    const mobileDigitThree = Selector("#mobile-digit-2");
    const submitButton = Selector("#submit-button");

    await t
      .typeText(usernameInput, "username123456")
      .click(digits)
      .typeText(digits, "123456")
      .click(submitButton);

    await t.removeRequestHooks(mock1);

    await t.addRequestHooks(mock2);

关于如何多次请求同一个端点的任何想法?

标签: testingautomationautomated-testse2e-testingtestcafe

解决方案


您可以使用请求正文区分对同一端点的不同请求。您可以将不同类型的过滤器传递给模拟onRequestTo方法,包括谓词函数。有关更多详细信息,请参阅带有谓词的过滤器文章。

因此,您可以对两个请求使用一个模拟,如下所示:

function isTheSecondRequest(requestBody) {
    // This should return `true` for the mutated request body
    // and `false` for the original one.
    //
    // For example:
    return requestBody.indexOf('{ foo: bar }') !== -1;
}

const mock = RequstMock()
    .onRequestTo(request => {
        request.url === '/apitest/authenticate' &&
        !isTheSecondRequest(request.body)
    })
    .respond(RESPONSE1, 200, HEADERS)

    .onRequestTo(request => {
        request.url === '/apitest/authenticate' &&
        isTheSecondRequest(request.body)
    })
    .respond(RESPONSE2, 200, HEADERS);

推荐阅读