理解 Cypress 中的 then()

问题描述 投票:0回答:2

我正在阅读 Cypress 的文档,我想我对 then() 的作用有所了解。 它的工作方式类似于 Promise,其中一个 Promise 返回另一个 Promise,但是通过 then(),我们返回一个新的主题。

如果我们看下面的代码示例,我们正在使用 then(),因为我们返回一个新变量,在本例中称为 target。

我的理解正确吗? 如果不对,有人可以纠正我吗?

  it.only('Marks an incomplete item complete', () => {
         //we'll need a route to stub the api call that updates our item
         cy.fixture('todos')
         .then(todos => {
             //target is a single todo, taken from the head of the array. We can use this to define our route
             const target = Cypress._.head(todos)
             cy.route(
                 "PUT",
                 `api/todos/${target.id}`,
                 //Here we are mergin original item with an object literal 
                 Cypress._.merge(target, {isComplete: true})
             )
         })
testing cypress
2个回答
0
投票

.then
用于接收来自
cy.fixture('todos')
的结果。变量
target
在此代码中并不重要。

在您的代码示例中,从

cy.fixture
返回的变量被命名为
todos
- 代码的间距可能会让您感到困惑?
.then
调用附加到
cy.fixture()
调用

// These 2 code blocks are the same - just different spacing
cy.fixture('todos')
.then(todos => {});

cy.fixture('todos').then(todos => {});

https://docs.cypress.io/api/commands/fixture.html#用法

cy.fixture('logo.png').then((logo) => {
  // load data from logo.png
})

0
投票

使用 .then() 允许您在回调函数中使用生成的主题,并且应该在您需要操作某些值或执行某些操作时使用。

简单地说,它用于玩弄前一个命令的yield并在这种情况下解决它。 THEN() 命令很方便,有助于调试前一个命令的产量。

  const baseURL = "https://jsonplaceholder.typicode.com";

   describe("Get Call-Expect+ normal req", () => {
   it("GetPostById-Expect", () => {
     cy.request(baseURL + "/posts/1").as("GetPostById");
     cy.get("@GetPostById").then((response) => {
      //response: status
     expect(response.status).to.equal(200);
     expect(response.status).to.eq(200);
         });
   });

参考:https://docs.cypress.io/api/commands/then#Promises

© www.soinside.com 2019 - 2024. All rights reserved.