我正在阅读 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})
)
})
.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
})
使用 .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);
});
});