Cypress io-等待延迟加载的js文件

Cypress io-等待延迟加载的js文件,cypress,Cypress,我们想测试一个网页,它在点击一个按钮后发出ajax请求 我们可以通过定义cy.route()来等待此ajax请求的响应 在ajax响应的onComplete块中,我们创建一个脚本标记并插入它: new Ajax.Request( "exampleAjax", { method: "post", parameters: {'data-id': dataID}, onComplete: function(transport) { var snode = doc

我们想测试一个网页,它在点击一个按钮后发出ajax请求

我们可以通过定义cy.route()来等待此ajax请求的响应

在ajax响应的onComplete块中,我们创建一个脚本标记并插入它:

new Ajax.Request( "exampleAjax", {
    method: "post",
    parameters: {'data-id': dataID},
    onComplete: function(transport) {
        var snode = document.createElement('script');  
        snode.setAttribute('type','text/javascript');                  
        snode.setAttribute('src','/some.js');
        document.getElementsByTagName('head')[0].appendChild(snode); 
    }
});
现在我们要等待加载并尝试一些.js

cy.route("GET", '/some.js').as('some_js')
cy.wait('@some_js')

但这是行不通的。我们如何才能做到这一点?

这在cypress目前是不可能的。Cypress团队正在进行网络存根。请看。

当我们仍在等待Art713链接的功能请求时,我们找到了一个解决方案:

我们让cypress检查在延迟加载的js文件中定义的全局变量/函数:

cy.window().its('<any global var / function>')

我不认为
onComplete
实际上触发了
some.js
的get,它只是将脚本引用添加到DOM中。您在console网络选项卡中看到了什么吗?是的,您是对的。我们在onComplete中没有得到some.js,而是在插入DOM的脚本标记中引用它->然后浏览器加载some.js(可以在开发工具的网络选项卡中看到)。那么,我们如何等待加载一些.js呢?这很有趣,我想知道浏览器是否对动态添加的脚本标记做出了反应。下一个问题是,赛普拉斯对此有反应吗。其中是与
cy.GET('.button')相关的
cy.route(“GET”,'/some.js')
。单击()
?您可能需要在启动操作之前(但在
cy.server()
之后)设置第二个路由观察程序。是的-我们已经设置了第二个路由观察程序:cy.route(“GET”,“/some.js”)。as('some_js');等等(“@some_js”)。但是它似乎没有被触发。我问的是
cy.route('/some.js')
与按钮单击的关系在哪里,因为它应该在
cy.server()
.click()
之间,但您的代码表明它不是。也许您可以显示完整的测试,而不是片段。所有与完整网络层存根实现相关的内容的母问题-
cy.window().its('<any global var / function>')
{
  "defaultCommandTimeout": 10000
}