在我的Cypress Cucumber测试中,下面是我当前的特性文件场景(此场景在最后一步失败):
Given I log in
Then I am on the dashboard
And the dashboard displays 0 peers (@Peers is called here, & 0 is the correct value here)
When I go to User 1 page
And I click the Add Peer button (@AddPeer request is successful here)
And I go to the dashboard
Then the dashboard displays 1 peers (@Peers is called here. The actual value is 0, but I am expecting 1. It looks like the code is using the response body from the 1st `Peers` intercept)
以下是我的步骤定义:
Given('I log in', () => {
cy.intercept('GET', `**/user/peers`).as('Peers')
cy.intercept('POST', `**/Peers/add`).as('AddPeer')
});
Then('I am on the dashboard', () => {
cy.url().should('include', `dashboard`)
})
Then('the dashboard displays {int} peers', expectedPeersCount => {
cy.wait('@Peers').then(xhr => {
const peers = xhr.response.body
expect(peers.length).to.eq(expectedPeersCount)
});
});
When('I click the Add Peer button', () => {
dashboard.btnAddPeer().click()
cy.wait('@AddPeer').then(xhr => {
expect(xhr.response.statusCode).to.eq(200)
})
})
When('I go to the dashboard', () => {
cy.visit('/dashboard');
});
在后端,@AddPeers()
向列表中添加一个对等点,而@Peers()
返回我的对等点列表。
当我转到 Jmeter 板时,@Peers()
返回最新的对等点列表。
但由于某种原因,上面的代码仍然使用了响应体为空的“旧”响应。
有人能指出我如何才能获得“最新”的@Peers
响应吗?
以下是第一个空的Peers
响应:
下面是第二个Peers
响应,其中包含1个数组项:
尝试修复:
Given('I log in', () => {
cy.intercept('GET', `**/user/peers`).as('Peers0')
cy.intercept('GET', `**/user/peers`).as('Peers1')
});
Then('the dashboard displays {int} peers', expectedPeersCount => {
cy.wait(`@Peers${expectedPeersCount }`).then(xhr => {
const peers = xhr.response.body
expect(peers.length).to.eq(expectedPeersCount)
});
});
柏树原木:
Peers1
下面看起来是空的,但它不应该是:
然后,看起来Peers0
具有填充的数组。请注意 Matched cy.intercepts()
2条答案
按热度按时间2izufjch1#
我不明白为什么原始代码不工作,它看起来非常好(没有一个运行的系统玩)。
但是"修复"变体是向后的--设置的***最后一个***截距是***第一个匹配***的截距。
来自文档:
此图显示
route5
是第一个被检查的(非中间件)路由,接着是route3
,然后是route1
。此外,由于每个拦截只打算捕获一个调用,因此添加
{ times: 1 },
使其成为这样。您可以在此屏幕截图中看到
其中,先匹配
Peers1
,然后匹配Peers0
,但下一个块期望相反的顺序And the dashboard displays 0 peers
使用0调用,然后Then the dashboard displays 1 peers
使用1调用您可以根据响应中的对等方数量动态设置别名。
如果这行得通,那么你就不需要担心安装的顺序了。
jbose2ul2#
这里有一点误解。别名拦截的
cy.wait()
只会等待第一个与给定参数匹配的请求。您可以使用唯一别名进行另一次拦截,然后对新的唯一别名使用
.wait()
。或者您可以使用相同的方法,使用
cy.get()
来获取匹配请求的列表,但是,这可能是一个不错的选择,因为cy.get()
不会等待新请求完成。