我尝试使用针对NodeJs的sql server驱动程序在量角器测试中访问Db(量角器是一个nodejs应用程序,所以这没问题)
我们的想法是在我们的e2e测试中检查Db数据:
我遇到的问题是,当量角器完成与浏览器的交互时,它将终止。因此,我访问Db的代码无法验证检索到的数据(e.x expect(dataFromDb).toEqual('foo'))
,因为对Db的请求在NodeJ中是异步的。
当我通过回调检索数据时,量角器已经终止。
在我看来,量角器只知道Web浏览器的承诺,并且在没有未完成的浏览器承诺时终止。
是否有任何解决方案可以保持量角器活着,以便我可以验证我的Db数据?感谢。
答案 0 :(得分:3)
要记住两件事。
1)expect(dataFromDb).toEqual('foo'))
:量角器包裹expect
以了解承诺。但是,它只能理解webdriver.promise
(即没有$ q或任何其他承诺)。如果你想对非webdriver承诺进行断言,你必须自己解决这个承诺:
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.
})
})
旁注,量角器修补jasmine it
以等待webdriver命令完成(就像它修补expect
的方式)以方便用户。但是,如果您不使用webdriver的承诺,则需要在通过it
回调
done