如何保持量角器运行?
How to keep protractor running?
我正在尝试使用 NodeJs 的 sql 服务器驱动程序在量角器测试中访问 Db(量角器是一个 nodejs 应用程序,所以这没问题)
想法是在我们的 e2e 测试中检查 Db 数据:
- 我们可以检查一些在Db中隐藏的东西是否正确写入UI(e.x日志,..)
- 我们可以在我们的 e2e 测试中隔离功能:我们不依赖于另一个功能来显示数据来检查写入数据的功能是否正常工作。
我遇到的问题是,只要量角器完成与浏览器的交互,它就会终止。因此,我访问 Db 的代码无法验证检索到的数据(e.x expect(dataFromDb).toEqual('foo'))
因为在 NodeJs 中对 Db 的请求是异步的。
当我通过回调获取数据的时候,protractor已经终止了。
在我看来,protractor 只知道网络浏览器的承诺,并在没有未完成的浏览器承诺时终止。
是否有任何解决方案可以使量角器保持活动状态以便我可以验证我的 Db 数据?谢谢
有两点需要牢记。
1) expect(dataFromDb).toEqual('foo'))
:量角器包装 expect
以理解承诺。但是,它只理解 webdriver.promise
(即没有 $q 或任何其他承诺)。如果您想针对非 webdriver 承诺做出断言,您必须自己解决承诺,例如:
dataFromDb.then(function(resolvedData) {
expect(resolvedData).toEqual('foo')
})
2) 量角器没有"terminate"。 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 的承诺,则需要在测试完成时通过 done
回调
告诉 it
我正在尝试使用 NodeJs 的 sql 服务器驱动程序在量角器测试中访问 Db(量角器是一个 nodejs 应用程序,所以这没问题)
想法是在我们的 e2e 测试中检查 Db 数据:
- 我们可以检查一些在Db中隐藏的东西是否正确写入UI(e.x日志,..)
- 我们可以在我们的 e2e 测试中隔离功能:我们不依赖于另一个功能来显示数据来检查写入数据的功能是否正常工作。
我遇到的问题是,只要量角器完成与浏览器的交互,它就会终止。因此,我访问 Db 的代码无法验证检索到的数据(e.x expect(dataFromDb).toEqual('foo'))
因为在 NodeJs 中对 Db 的请求是异步的。
当我通过回调获取数据的时候,protractor已经终止了。
在我看来,protractor 只知道网络浏览器的承诺,并在没有未完成的浏览器承诺时终止。
是否有任何解决方案可以使量角器保持活动状态以便我可以验证我的 Db 数据?谢谢
有两点需要牢记。
1) expect(dataFromDb).toEqual('foo'))
:量角器包装 expect
以理解承诺。但是,它只理解 webdriver.promise
(即没有 $q 或任何其他承诺)。如果您想针对非 webdriver 承诺做出断言,您必须自己解决承诺,例如:
dataFromDb.then(function(resolvedData) {
expect(resolvedData).toEqual('foo')
})
2) 量角器没有"terminate"。 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 的承诺,则需要在测试完成时通过 done
回调
it