在赛普拉斯中两次存根相同的端点

Stub the same endpoint twice in cypress

我想对同一个 API 端点进行两次存根,因此第二次调用 returns 与第一个不同的响应。这是我想象中的代码片段:

cy.route('POST', 'access-tokens', '@loginFailResponse', {status: 401}).as('loginFail')
cy.route('POST', 'access-tokens', '@loginSuccessResponse').as('loginSuccess')

我第一次尝试登录时拒绝访问,我更改了表单输入,然后它应该让我登录。

我试图将第二个 cy.route(...) 定义包装为第一个输出的回调函数,但赛普拉斯拒绝在承诺中调用 cy.anything。就像下面的例子

cy.route('POST', 'access-tokens', '@loginFailResponse', {status: 401, onResponse: () => {
      cy.fixture('login_screen/login_success_response.json').as('loginSuccessResponse')
      cy.route('POST', 'access-tokens', '@loginSuccessResponse').as('loginSuccess')}
}}).as('loginFail')

这是我的测试用例:

cy.route('POST', 'access-tokens', '@loginFailResponse', {status: 401}).as('loginFail')
cy.route('POST', 'access-tokens', '@loginSuccessResponse').as('loginSuccess')
cy.get("form input[type='email']").type("bad@email.com")
cy.get("form input[type='password']").type("Bad password")
// this should fail
cy.get("form").submit()
cy.get("form input[type='password']").type("g00d@password.com")
// this should let me in
cy.get("form").submit()

每次您定义 .route('VERB', '/endpoint', ...) 它都会覆盖您之前的定义。最简单的解决方案是在完成第一次调用后覆盖此端点

这个测试对你有用,Filip。

cy.route('POST', 'access-tokens', '@loginFailResponse', {status: 401}).as('loginFail')
cy.get("form input[type='email']").type("bad@email.com")
cy.get("form input[type='password']").type("Bad password")
// this should fail
cy.get("form").submit()
cy.route('POST', 'access-tokens', '@loginSuccessResponse').as('loginSuccess')
cy.get("form input[type='password']").type("g00d@password.com")
// this should let me in
cy.get("form").submit()