cypressError :Вы попытались сделать утверждение chai-jQuery для объекта, который не является ни объектом DOM, ни объектом jQuery

#cypress #intercept #cypress-cucumber-preprocessor

Вопрос:

я пытаюсь проверить, возвращает ли тело ответа запроса на auth0 объект, содержащий атрибут access_toke. это мой код:

 When("I attemt to login with currect user credentials", () => {
  cy.intercept("https://punct-development.eu.auth0.com/oauth/token").as(
    "token"
  );
  cy.loginWith({ email: email, password: password });
  cy.wait("@token");
});

Then("Im succesfully logged in", () => {
  cy
    // .wait(14000)
    .get("@token")
    .its("response")
    .should("have.property", "body")
    .then((body) => {
      expect(body).to.have.attr("access_token");
    });
 

это тэп, в котором он терпит неудачу, как вы можете видеть, я получаю тело ответа-
expected { Object (access_token, id_token, ...) } to have attribute access_token
но при попытке проверить, что у него есть атрибут access_token, я получаю следующую ошибку()-

 
The chai-jQuery assertion you used was:

  > attr

The invalid subject you asserted on was:

  > Object{5}

To use chai-jQuery assertions your subject must be valid.

This can sometimes happen if a previous assertion changed the subject.
cypress/integration/Login/login.ts:29:28
  27 |     .should("have.property", "body")
  28 |     .then((body) => {
> 29 |       expect(body).to.have.attr("access_token");
     |                            ^
  30 |     });
  31 | });
  32 | ```

[test run screenshot][1]

[1]: https://i.stack.imgur.com/F5fRC.png

any help will be much appreciated!


  
 

Комментарии:

1. если ваш код верен, вы можете попытаться заменить утверждение на `cy.get(тело). должен(‘иметь,attr’, «access_token»)

2. @RosenMihaylov я изменил его на — Then("Im succesfully logged in", () => { cy // .wait(14000) .get("@token") .its("response") .should("have.property", "body"); cy.get(body).should("have,attr", "access_token"); }); и теперь я получаю следующую ошибку в своем коде — Не могу найти имя «тело». что такое синтаксис currect?

3. он должен быть прикован цепью .then , как вы это сделали в своем коде

4. cy // .подождите(14000) .получите(«@токен») .его(«ответ») .должен(«иметь.свойство», «тело»)). должен(«иметь,attr», «access_token»)

5.@RosenMihaylov у меня все получилось! я не заменил утверждение, как вы предлагали, просто заменил expect(body).to.have.property("access_token"); expect(body).to.have.attr("access_token"); , как вы думаете, это правильное решение?

Ответ №1:

Я думаю, чай использует .property , в то время как кипарис использует .attr . вы можете использовать следующую цепочку, потому .should() что команда a возвращает объект, который она утверждает, а не исходный элемент цепочки

 cy
    // .wait(14000)
    .get("@token")
    .its("response")
    .should("have.property", "body")
    .should('have.attr', "access_token")