我正在使用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()。它有效,但有更好的方法吗?
答案 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,否则您最终也会测试其他用例。