在执行测试之前等待自己的函数(返回一个承诺)

2024-02-02

我有自己的函数(调用测试控制器服务器来重置数据库)。它返回一个承诺,该承诺在数据库成功重置后完成。

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

})

我怎样才能在赛普拉斯中做到这一点?

Update

我试过了

  before(() => {
    return resetDb(Cypress.config().apiServerUrl);
  });

但随后我收到一条警告:

Cypress 检测到您在测试中返回了一个 Promise,但还在该 Promise 中调用了一个或多个 cy 命令

我没有调用cy in resetDb().


赛普拉斯有承诺(Cypress.Promise https://docs.cypress.io/api/utilities/promise.html#Syntax),但它们不是真正的承诺,更像是鸭子打字 https://en.wikipedia.org/wiki/Duck_typing。事实上,Cypress 并不是 100% 与真正的承诺兼容,它们可能有效,也可能无效。

考虑到Cypress.Promise作为任务或操作。它们与所有其他 cypress 命令一起顺序执行。

要将您的函数放入 Cypress 管道中,您可以使用自定义命令 https://docs.cypress.io/api/cypress-api/custom-commands.html#Syntax。文档没有说明,但你可以返回一个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
  });

})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在执行测试之前等待自己的函数(返回一个承诺) 的相关文章

随机推荐

  • 将 decltype 与成员函数指针结合使用

    我使用时遇到一些问题decltype对于成员函数指针 include
  • 转义 findstr 搜索字符串中的引号

    使用 findstr exe 时如何正确转义搜索字符串中的引号 Example findstr misc namespace cs gt ns txt 这会输出到控制台 而不是我指定的文件 我直接在命令行上执行此操作 而不是实际上在批处理文
  • 在 NHibernate 中删除对象时,“not-null 属性引用 null 或瞬态值”

    我创建了一个 MVC 4 并使用 NHibernate 来持久化模型并使用 Fluent nhibernate 映射它 该实体有一个 Name 属性 并按如下方式映射 Map x gt x Name Not Nullable Length
  • Cocoapods Firebase Pod 更新

    早上好 我在更新 Firebase Analytics 和 Firebase Core pod 时遇到问题 我的 Pod 文件 source https github com CocoaPods Specs git source https
  • 写入易失性变量后会发生什么?

    我想知道写入易失性变量是否会强制jvm将所有非易失性变量同步到内存 例如 以下代码中会发生什么 volatile int x int y y 5 x 10 x 将被写入内存 但是 y 会发生什么 它也会被写入内存吗 是的 根据规则Java
  • 使用多列交叉应用动态 SQL 逆透视数据

    微软 SQL Server Management Studio v18 8 我有一个表 其中有不同的列和列名称 我需要对数据进行逆透视 以便最终可以将其存储到另一个表中 不幸的是 这是一个过程 因为原始表格是从 Google 表格中提取的
  • 如何减慢动画播放速度?

    我有动画矩形jsFiddle 演示 http jsfiddle net kHvaX 如何减慢动画速度并使其更稳定 我尝试使用循环延迟 但延迟循环和 requestAnimationFrame 之间存在冲突 我不想改变参数window set
  • 使用 java 查询 MySQL 数据库

    伙计们 简单地说 我有一个带有文本输出框的java应用程序 我想查询数据库并将输出显示到文本框中 示例我有一个包含两列的数据库food and color 我想 SELECT in Table WHERE color blue 有什么建议么
  • 为什么我的 tempdb 在服务器重新启动时会重置权限?

    过去两次我们重新启动 SQL Server 我们的网站就瘫痪了 原因似乎是因为 tempdb 正在重新创建 并且 ASPState 用户失去了读 写 tempdb 的权限 它是 ASP 站点 会话数据存储在 sql server 中 直到大
  • 编写 jax-ws Web 服务并生成 WSDL,无需 XSD

    我在java上为tomcat应用程序服务器编写了一个简单的JAX WS Web服务 我有一个接口和实现类 界面 WebService name myWs SOAPBinding style Style RPC public interfac
  • R:不同日期的栅格图层之间的插值

    假设我有 4 个具有相同扩展的栅格图层 其中包含 4 个不同年份的数据 2006 2008 2010 和 2012 library raster r2006 lt raster ncol 3 nrow 3 values r2006 lt 1
  • 如何在rhino javascript中将对象属性添加到全局对象

    我想将对象中的一些属性添加到全局命名空间中 在浏览器上的 javascript 中 我可以将其添加到window像这样的对象 var myObject foo function alert hi and many more properti
  • jQuery 仅在第二次单击时工作

    谁能指出为什么我在第一次单击时无法弹出警报的问题 它仅在每秒一次点击时起作用 即 在奇数点击时不起作用 在偶数点击时起作用 HTML div class slider div class slider box ui slider ui sl
  • 将数组写入 Excel 范围

    我目前正在尝试使用以下代码将数据从对象数组写入 Excel 中的范围 其中objData只是一个字符串数组 private object m System Type Missing object objData getDataIWantTo
  • JavaScript Lint inc_dec_within_stmt 警告

    有人可以解释 javascriptlint 不是 jslint 发出警告的原因 重要性吗 inc dec within stmt increment and decrement operators used as part of great
  • 如何仅覆盖多个背景图像声明中的第二个图像?

    如何利用级联仅覆盖多个背景图像声明中的第二个图像 我已经指定了一个标准样式lis 有两个背景图像 小猫和右侧的鱼 我还指定了一个样式li secondary我只想更改两个背景图像中的第二个 li background url data im
  • 为什么 Visual Studio 单元测试中的每个测试都会触发 TestInitialize?

    我正在使用 Visual Studio 2010 Beta 2 我有一个 TestClass 其中有一个 TestInitialize TestCleanup 和一些 TestMethods 每次运行测试方法时 初始化和清理方法也会运行 我
  • 无法在UITableViewCell的drawRect中绘制

    我在自定义 UITableViewCell 的 drawRect 方法中绘图时遇到问题 这是我正在使用的代码 void drawRect CGRect rect CGContextRef ctx UIGraphicsGetCurrentCo
  • PHP发送邮件附件

    我找到了post https stackoverflow com questions 3092821 php send e mail with attachment关于向邮件添加附件 问题是如何将上传的文件与该功能连接起来 我必须通过什么
  • 在执行测试之前等待自己的函数(返回一个承诺)

    我有自己的函数 调用测试控制器服务器来重置数据库 它返回一个承诺 该承诺在数据库成功重置后完成 function resetDatabase returns a promise for my REST api call 我的目标是能够在所有