Chr*_*ier 5 javascript chai cypress
我试图断言赛普拉斯没有调用过一条路线.我仔细查看了文档并没有找到任何结果.
我想做这样的事情:
cy.get('@myRouteAlias').should('have.not.been.called');
Run Code Online (Sandbox Code Playgroud)
我目前正在解决这个问题,断言成功的请求toast消息没有显示,但它是一个脆弱的解决方案.
有任何想法吗?
gui*_*epn 14
不幸的是,以上都没有真正对我有用,我用这个命令让它工作:
Cypress.Commands.add('shouldBeCalled', (alias, timesCalled) => {
expect(
cy.state('requests').filter(call => call.alias === alias),
`${alias} should have been called ${timesCalled} times`
).to.have.length(timesCalled);
});
Run Code Online (Sandbox Code Playgroud)
然后我像这样使用:
// Checks that FetchChatList has not been called
cy.shouldBeCalled('FetchChatList', 0);
Run Code Online (Sandbox Code Playgroud)
Jen*_*ane 12
测试没有发生动作的情况非常困难.有了这种断言,你真的只能说:
"XHR请求并非在400ms赛普拉斯寻找此XHR请求(或者您设置超时的任何内容)内"
这并没有真正确认从未调用过XHR请求.
话虽这么说,赛普拉斯提供了一种方法来检索使用未记录的所有XHR请求cy.state('requests').您可以检查其长度,通过别名等过滤它们,以确定您想要的内容.
这些在 7.6 版本中都不适合我,但我找到了一个非常简单的解决方案。
鉴于您有这样的拦截:
cy.intercept('GET', '**/foo/bar**').as('myRequest');
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
cy.wait(2000);
cy.get('@myRequest.all').then((interceptions) => {
expect(interceptions).to.have.length(0);
});
Run Code Online (Sandbox Code Playgroud)
因此,当请求可能发生时,您等待一段时间,并在等待后确保它没有发生。对我来说工作得很好,不需要额外的命令。我在这里找到了该解决方案:https ://www.gitmemory.com/issue/cypress-io/cypress/15036/780706160
小智 6
作为路由选项onResponse功能的变体集,它会掉线测试
例如 expect(true).to.be.false;
如果当前路线发生呼叫,它将触发错误
cy.route({
url: <url>,
onResponse: function () {
expect("Unexpected Https call").to.be.false;
}
})
Run Code Online (Sandbox Code Playgroud)
值得考虑这个测试的异步特性,这是前面的例子没有考虑到的。这是一个工作示例:
cy.route('/my-route').as('myRoute')
const noExpectedCalls = 1
cy.get('@myRoute').then(() => {
expect(cy.state('requests').filter(r => r.alias === 'myRoute')).to.have.length(noExpectedCalls)
})
Run Code Online (Sandbox Code Playgroud)
这是使用 cypress 命令断言请求计数的正确方法。
把它放在你的commands.js文件中:
Cypress.Commands.add('requestsCount', (alias) =>
cy
.wrap()
.then(() => cy.state('requests').filter(req => req.alias === alias).length),
);
Run Code Online (Sandbox Code Playgroud)
比在您的测试中使用新命令,如下所示:
it('should count requests', () => {
cy.server();
cy.route('**').alias('theRequest');
cy.wait('@theRequest');
cy.requestsCount('theRequest').should('eq', 1);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |