如何保持量角器运行

How to keep protractor running?

本文关键字:运行 量角器 何保持      更新时间:2023-09-26

我正在尝试使用 NodeJs 的 sql 服务器驱动程序在量角器测试中访问 Db(量角器是一个 nodejs 应用程序,所以这没问题)

这个想法是在我们的 e2e 测试中检查 Db 数据:

  • 我们可以检查一些隐藏的东西是否在 Db 中正确写入,这些东西在 UI 上看不到(例如 x 日志,..)
  • 我们可以在 e2e 测试中隔离特征:我们不依赖另一个特征来显示数据来检查写入数据的特征是否正常工作。

我遇到的问题是,每当量角器完成与浏览器的交互时,它就会终止。因此,我访问 Db 的代码无法验证检索到的数据(例如 x expect(dataFromDb).toEqual('foo'))因为对 Db 的请求在 NodeJs 中是异步的。

当我通过回调检索数据时,量角器已被终止。

在我看来,量角器只知道 Web 浏览器承诺,并在没有未完成的浏览器承诺时终止。

是否有任何解决方案可以使量角器保持活力,以便我可以验证我的 Db 数据?谢谢。

要记住两件事。

1)expect(dataFromDb).toEqual('foo')):量角器包裹expect以了解承诺。但是,它只理解webdriver.promise(即没有$q或任何其他承诺)。如果你想对非 Web 驱动程序的承诺做出断言,你必须自己解决承诺,如下所示:

dataFromDb.then(function(resolvedData) {
  expect(resolvedData).toEqual('foo')
})

2)量角器不会"终止"。量角器仅帮助您使用另一个测试框架(即茉莉花、摩卡花)开始测试;一旦完成,它只是一个工具库(即定位器,waitForAngular等),您可以在该测试框架上运行。这是您必须防止终止的其他框架。我不知道你用的是什么框架,但我会以茉莉花为例:

it('call db', function(done) { //notice the inclusion of `done`
  browser.get('something'); //this is protractor 
  element(by.xyz).click(); //this is protractor
  var data = queryDatabase(); // you must tell jasmine to wait for this.
  data.then(function(resolvedData) {
    expect(resolvedData).toBe('foo');
    done(); // tell jasmine you're done. 
  })
})

旁注,量角器修补了茉莉花it以等待 webdriver 命令完成(就像它修补 expect 一样),以方便用户。但是,如果您不使用 webdriver 的承诺,则需要通过done回调告诉it测试何时完成