Javascript 如何保持量角器运行?
我正在尝试使用sql server驱动程序为NodeJs访问量角器测试中的Db(量角器是NodeJs应用程序,所以这没有问题) 我们的想法是在e2e测试中检查Db数据:Javascript 如何保持量角器运行?,javascript,sql-server,protractor,Javascript,Sql Server,Protractor,我正在尝试使用sql server驱动程序为NodeJs访问量角器测试中的Db(量角器是NodeJs应用程序,所以这没有问题) 我们的想法是在e2e测试中检查Db数据: 我们可以检查数据库中是否正确写入了一些在UI上看不到的隐藏内容(e.x日志,…) 我们可以在e2e测试中隔离特性:我们不依赖另一个特性来显示数据,以检查写入数据的特性是否正常工作 我遇到的问题是,只要量角器完成与浏览器的交互,它就会终止。因此,我访问数据库的代码无法验证检索到的数据(e.xexpect(dataFromDb)
- 我们可以检查数据库中是否正确写入了一些在UI上看不到的隐藏内容(e.x日志,…)
- 我们可以在e2e测试中隔离特性:我们不依赖另一个特性来显示数据,以检查写入数据的特性是否正常工作
expect(dataFromDb).toEqual('foo'))
,因为对数据库的请求在NodeJs中是异步的
当我通过回调检索数据时,量角器已经终止
在我看来,量角器只知道web浏览器承诺,并在没有未完成的浏览器承诺时终止
有没有办法让量角器保持活动状态,以便我可以验证我的数据库数据?谢谢。有两件事要记住 1)
expect(dataFromDb.toEqual('foo'))
:量角器包装expect
以理解承诺。但是,它只理解webdriver.promise
(即没有$q或任何其他承诺)。如果您想针对非webdriver承诺做出断言,您必须自己解决该承诺,如:
dataFromDb.then(function(resolvedData) {
expect(resolvedData).toEqual('foo')
})
2) 量角器不“终止”。量角器仅帮助您使用另一个测试框架(即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.
})
})
旁注,为了方便用户,量角器将jasmine
it
修补为等待webdriver命令完成(就像修补expect
一样)。然而,如果您不使用webdriver的承诺,您需要告诉它何时通过done
回调完成测试。@alecxe:量角器应该被视为现实世界中的真正测试者。在现实世界中,测试人员会打开浏览器,对其进行测试,然后转到数据库检查数据。因此,量角器的设计应考虑到这一点。