gpt4 book ai didi

javascript - 如何保持 Protractor 运行?

转载 作者:行者123 更新时间:2023-11-29 10:41:31 25 4
gpt4 key购买 nike

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

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

  • 我们可以检查 Db 中是否正确写入了一些在 UI 上看不到的隐藏内容(例如日志,..)
  • 我们可以在端到端测试中隔离功能:我们不依赖于另一个功能来显示数据来检查写入数据的功能是否正常工作。

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

当我通过回调获取数据时, Protractor 已经终止。

在我看来,protractor 只知道网络浏览器的 promise ,并在没有未完成的浏览器 promise 时终止。

是否有任何解决方案可以让 Protractor 保持事件状态,以便我可以验证我的 Db 数据?谢谢。

最佳答案

要记住两件事。

1) expect(dataFromDb).toEqual('foo')):Protractor wrapped expect 以理解 promise 。但是,它只理解 webdriver.promise(即没有 $q 或任何其他 promise )。如果你想对非 webdriver promise 做出断言,你必须像这样自己解决 promise :

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

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

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.
})
})

旁注,为了方便用户,protractor 修补了 jasmine it 以等待 webdriver 命令完成(就像它修补 expect 的方式一样)。但是,如果您不使用 webdriver 的 promise,则需要在测试完成时通过 done 回调告诉 it

关于javascript - 如何保持 Protractor 运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28144929/

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