我正在使用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 回答
问题可能是cypress尚未完全处理
fetch
调用 . 您可以通过以下方式禁用它,但请确保您已获取polyfill . 然后,这将发出cypress可以观察到的XHR请求 .更多内容请阅读:https://github.com/cypress-io/cypress/issues/95#issuecomment-281273126
有关信息,我在我的搜索模式(在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()
之前的页面,这不是文档化的模式,但在这种情况下似乎没问题 .我找到了造成这种行为的原因 . 问题不在模态窗口本身,但执行第二个请求的代码在promise的另一个请求的回调中被调用 . 就像是:
并且loadView函数执行第二次获取 .
所以当我从promise的回调中删除loadView时,这两个请求对于cypress都是可见的 .