基本上,我的任务是下一个:当我的应用触发外向xhr请求时,我想对请求有效负载进行一些声明,并在请求完成后继续执行其他声明。
因此,我在onRequest
方法上使用了cy.route
选项,该方法使您可以访问传出xhr请求。我的初始代码如下:
cy.server();
cy.route({
method:'POST',
url:'/api/v3/table-metas/**',
onRequest(xhr) {
console.log('==========BEFORE========');
cy.wrap(xhr).
its('request').
its('body').
its('embedded').
should('to.deep.equal',
[
{
"attributes": {
"name": "Test Name"
},
"type": "test_type"
}
]
).debug();
console.log('=============AFTER===========');
}
}).as('getTableMetas');
但是此代码使我的应用程序认为该请求失败,并且在cypress日志中,它向我显示该请求正在等待处理,直到超时失败。 然后我决定删除我的断言,一切正常!:
cy.server();
cy.route({
method:'POST',
url:'/api/v3/table-metas/**',
onRequest(xhr) {
console.log('==========BEFORE========');
console.log('=============AFTER===========');
}
}).as('getTableMetas');
因此,我认为问题出在我的断言代码中,并使用其他cy
方法进行了一些测试,但似乎任何cy.
方法都导致完全相同的失败:
cy.server();
cy.route({
method:'POST',
url:'/api/v3/table-metas/**',
onRequest(xhr) {
console.log('==========BEFORE========');
cy.log('AAAAAAAAAAAA');
console.log('=============AFTER===========');
}
}).as('getTableMetas');
我在这里做错了什么? 如果它是赛普拉斯的设计行为,那么我应该如何声明传出的请求正文?
将感谢您的任何帮助
答案 0 :(得分:1)
给定别名参数时:
cy.wait()产生一个对象,其中包含XHR的HTTP请求和响应属性。 Source
可以通过调用waits方法将属性获取器链接到产生的对象。 例如
it('verifies request body', () => {
cy.server();
cy.route({
method:'POST',
url:'/api/v3/table-metas/**',
onRequest(xhr) {
console.log('==========BEFORE========');
console.log('=============AFTER===========');
}
}).as('getTableMetas');
// do some action that makes a request to the intercepted request
cy.waits('@getTableMetas')
.its('request.body.embedded')
.should('to.deep.equal', [
{
"attributes": {
"name": "Test Name"
},
"type": "test_type"
}
]).debug();
});
更新:
onRequest
作为回调执行,调用cy.wraps
会在执行期间创建一个从未解决的承诺。
我建议在chai
回调中使用普通的onRequest
断言,因为它们是同步的。
expect(xhr.request.body.embedded).to.deep.equal([
{
"attributes": {
"name": "Test Name"
},
"type": "test_type"
}
])