量角器测试后清理

时间:2014-10-14 23:36:57

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

我正在使用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()。它有效,但有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

  

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

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

即。你想重新开始。

黑客攻击可以帮助并确保它们非常干净但可能会减慢您的测试速度。

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,否则您最终也会测试其他用例。