gpt4 book ai didi

javascript - 在执行测试之前等待一个自己的函数(它返回一个 promise )

转载 作者:行者123 更新时间:2023-12-05 01:36:02 24 4
gpt4 key购买 nike

我是 Cypress 的新手,正在尝试弄清楚事情是如何运作的。

我有自己的函数(调用测试 Controller 服务器来重置数据库)。它返回一个 promise ,当数据库成功重置时完成。

function resetDatabase(){
// returns a promise for my REST api call.
}

我的目标是能够在所有测试之前执行它。
describe('Account test suite', function () {

// how can I call resetDb here and wait for the result
// before the tests below are invoked?

it('can log in', function () {
cy.visit(Cypress.config().testServerUrl + '/Account/Login/')

cy.get('[name="UserName"]').type("admin");
cy.get('[name="Password"]').type("123456");
cy.get('#login-button').click();
});

// .. and more test

})

我怎样才能在柏树中做到这一点?

更新

我试过了
  before(() => {
return resetDb(Cypress.config().apiServerUrl);
});

但后来我收到一个警告说:

Cypress detected that you returned a promise in a test, but also invoked one or more cy commands inside of that promise



我没有在 cy 中调用 resetDb()

最佳答案

Cypress 有 promise (Cypress.Promise),但它们不是真正的 promise ,更像 duck typing .事实上,Cypress 并不是 100% 兼容真正的 Promise,它们可能有效,也可能无效。

想想Cypress.Promise作为任务或 Action 。它们与所有其他 cypress 命令一起按顺序执行。

要将您的功能放入 Cypress 管道,您可以使用 custom commands .文档没有说明,但您可以返回 Cypress.Promise从他们。

Cypress.Commands.add('resetDb', function () {
var apiServerUrl = Cypress.config().apiServerUrl;
return new Cypress.Promise((resolve, reject) => {
httpRequest('PUT', apiServerUrl + "/api/test/reset/")
.then(function (data) {
resolve();
})
.catch(function (err) {
reject(err);
});
});
});

然后可以从测试本身执行该命令,或者在我的情况下从 before() 执行。 .
describe('Account', function () {
before(() => {
cy.resetDb();
});

it('can login', function () {
// test code
});

})

关于javascript - 在执行测试之前等待一个自己的函数(它返回一个 promise ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52154037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com