【问题标题】:cleaning up after Protractor tests量角器测试后清理
【发布时间】:2014-10-14 23:36:57
【问题描述】:

我正在使用 Rails + AngularJS,并已切换到使用 Protractor 进行所有端到端测试。我使用protractor-rails gem 设置它,这有助于我使用测试数据库而不是开发数据库进行测试。

问题是在我运行测试后,例如:'create_client_spec.js.coffee' 然后我的表中剩下一个新客户端,在我的测试后没有清理。

helper = require('../../helper.js.coffee')

describe('create a new client', ->

  beforeEach ->
    helper.login()

  afterEach ->
    helper.logout()

  it 'shows the client after creation', ->
    browser.get('/api#/clients')
    element(By.id("new_btn")).click()

    element(By.id("name")).sendKeys("John Smith")
    element(By.id("create_btn")).click()

    expect(element(By.id("heading")).getText()).toContain("John Smith")

)

如何很好地清理这些测试?

我的一个想法是在 afterEach 中添加一个方法,以便在此文件中的每个测试之后删除新客户端。

更新:

我在 helper.js.coffee 中添加了以下内容

  delete_client: ->
    last=element.all(By.id("listing")).last()
    last.element(By.id("delete")).click()
    this.accept_dialog()

  accept_dialog: ->
    # Accept the dialog which is displayed
    ptor = protractor.getInstance()
    alertDialog = ptor.switchTo().alert()
    alertDialog.accept()

然后我在注销之前在 afterEach 块中调用 helper.delete_client()。它有效,但有更好的方法吗?

【问题讨论】:

  • 你知道protractor config中的onCleanUp可选功能吗?
  • 不,我不知道这个 onCleanUp 选项,我可以在 onCleanUp 中调用 rake 任务吗?
  • 我不确定,它会在你所有测试结束时自动调用,这就是我所知道的。

标签: angularjs testing jasmine protractor end-to-end


【解决方案1】:

如何很好地清理这些测试?

似乎您对cleanup 的定义是重新开始,即从新的listing 元素开始,而不是打开对话框。由于您 delete 最后一个元素,因此您的每个测试都以空列表开始。

即你想重新开始。

遵循 hack 可以帮助并确保它们非常干净,但可能会减慢您的测试速度。

browser.get('<your root URL>');

如果这对您来说“清洁太多”,那么您的afterEach 选项实际上还不错,但是您最终会以您编码的方式测试您的“删除”用例。

//note I have not run this snipped this so it is not syntax free
listing=element.all(By.id("listing"))
listing.innerHTML = '';//or whatever should be the default
OR
listing.removeChild(listing.last()); 

关于打开的对话框。

element(By.id("create_btn")).click() 没有关闭对话框似乎很奇怪,但我对用例了解多少。

要删除对话框,您可以遵循类似的 DOM 操作技术,只需删除该 DOM,否则您最终也会测试其他用例。

【讨论】:

  • 清理我的意思是重新开始我的种子数据,而不是我输入的新项目。及时返回数据库快照就好了。
  • 对于 SPA,架构是 REST 并且后端通过使用数据库来维护状态。它移动到一个新的状态。所以这是后端问题域。因此,如果可能的话,您可能希望避免依赖后端状态。当我们专注于测试“UI”代码而不是来自后端的代码时,所有这些问题都变得没有意义。因此,您可能想要测试/验证“页面上显示了多个列表”,而不是测试/验证“我必须在页面上有 5 个列表”。这消除了作为测试 REST 服务的单独区域的数据库/后端测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多