首页 文章

为什么在cypress中存根可能不适用于加载页面后调用的路由

提问于
浏览
1

我正在使用cypress来编写测试并且遇到一个问题,而这个问题并没有出现在每个测试中 . 在某些情况下,它有效,我不知道为什么 . 所以...

The Problem:

我在beforeEach中为它定义了一个路由和别名:

beforeEach(function () {
  cy.server()
  cy.route('GET', '/favourites?funcName=columnPreset', []).as('columnPresetEmpty')
  cy.visit('#/search')
})

如果在页面加载时发生http请求,Stub工作正常 . 但是,如果我执行响应click事件的请求(模式对话框打开并执行http请求),它只会出现在未作为存根的命令中,并且在请求超时后 cy.wait('@columnPresetEmpty') 失败 .

it('does not work', function () {
   cy.get('[data-test=button-gridSettings]').click()
   cy.wait('@columnPresetEmpty')
 })

同时在其他测试中,我几乎具有相似的功能,只需单击按钮即可执行请求,而无需打开新的模态窗口 . 这是唯一的区别 .

我究竟做错了什么?

3 回答

  • 0

    问题可能是cypress尚未完全处理 fetch 调用 . 您可以通过以下方式禁用它,但请确保您已获取polyfill . 然后,这将发出cypress可以观察到的XHR请求 .

    cy.visit('#/search', {
        onBeforeLoad: (win) => {
            win.fetch = null
        }
    })
    

    更多内容请阅读:https://github.com/cypress-io/cypress/issues/95#issuecomment-281273126

  • 0

    有关信息,我在我的搜索模式(在Vue应用程序中)尝试了它,它工作正常 .

    我做了什么:

    • 在应用程序的静态文件夹中创建了一个名为 test-get-in-modal.txt 的虚拟文件

    • 在模态代码中添加了 http.get('test-get-in-modal.txt') ,因此它仅在模态打开后运行

    在规范中

    • ,在 before() 中做了 cy.server()cy.route('GET', 'test-get-in-modal.txt', []).as('testGetInModal')

    _1533644中的

    • 添加了 cy.wait('@testGetInModal') 成功了

    • 已更改为 cy.route('GET', 'not-the-file-you-are-looking-for.txt'... ,但未按预期失败


    我能看到的唯一区别是我 cy.server() 之前的页面,这不是文档化的模式,但在这种情况下似乎没问题 .

  • 0

    我找到了造成这种行为的原因 . 问题不在模态窗口本身,但执行第二个请求的代码在promise的另一个请求的回调中被调用 . 就像是:

    fetch('/initData')
      .then(loadView)
    

    并且loadView函数执行第二次获取 .

    所以当我从promise的回调中删除loadView时,这两个请求对于cypress都是可见的 .

相关问题