首页 > 解决方案 > 本地存根服务器的赛普拉斯请求 PATCH 调用失败

问题描述

我有一个本地存根服务器,它有一个 PATCH 请求。当我在柏树内调用这个本地端点时,它失败了。我的柏树代码

Cypress.Commands.add('callLocalAPI', (id: string = '1') => {
  const options = {
    method: 'PATCH',
    url: `${Cypress.env().baseUrl}test/api`,
    // failOnStatusCode: false,
    retryOnStatusCodeFailure: true,
    log: true,
    body: {
      id,
    },
  }

  // we need cy to visit the current URL so it grabs cookie
  // for our request
  cy.visit('/')
  cy.request(options).then((response) => {

    if (!String(response.body.id)) {
      console.error(response)
      throw Error(`Fail to get response with ${id}`)
    }
  })
})

然后调用这个自定义 cypress 命令

cy.callLocalAPI('2')

当我使用邮递员 (http://localhost:8882/test/api) 访问此端点时,我得到了状态码为 200 的预期响应,因此模拟服务器没有问题。

但是当我运行 cypress 测试时,我总是得到 404。

Status: 404 - Not Found
Headers: {
  "server": "stubby/5.0.0 node/v12.19.0 (darwin x64)",
  "date": "Fri, 03 Sep 2021 03:36:49 GMT",
  "connection": "keep-alive",
  "keep-alive": "timeout=5",
  "transfer-encoding": "chunked"
}

标签: automationintegration-testingcypresse2e-testingstubbing

解决方案


尝试

  const options = {
    method: 'PATCH',
    url: 'test/api',
    ...

来自赛普拉斯文档 - 请求

如果您在访问页面后发出 cy.request(),赛普拉斯假定用于 cy.visit() 的 url 是主机。
cy.visit('http://localhost:8080/app')
cy.request('users/1.json') // url is http://localhost:8080/users/1.json

可能只是这一行缺少路径分隔符

url: `${Cypress.env().baseUrl}test/api`

Cypress.env().baseUrl

请注意,此字符串的值为

  • 取自文件cypress.env.json(不是cypress.json

    {
       "baseUrl": "http://localhost:8882/" 
    }
    
  • 或在命令行中覆盖
    cypress open --env baseUrl=http://localhost:8882/


推荐阅读