如何保持量角器运转?

时间:2015-01-26 04:47:20

标签: javascript sql-server protractor

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

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

  • 我们可以检查在UI上无法在Db中正确写入的某些隐藏内容(e.x Logs,..)
  • 我们可以在e2e测试中隔离功能:我们不依赖其他功能来显示数据,以检查写入数据的功能是否正常工作。

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

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

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

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

1 个答案:

答案 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
相关问题