Ruby on rails 为什么带有javascript的rspec特性规范不进行测试拆卸?
我有几个非javascript规范,它们使用ui创建和编辑记录。 当我运行这些规范时,rspec为每个测试自动删除测试数据库记录 然而,下面的测试是第一个为某些ajax内容设置了Ruby on rails 为什么带有javascript的rspec特性规范不进行测试拆卸?,ruby-on-rails,ruby,ajax,ruby-on-rails-4,rspec,Ruby On Rails,Ruby,Ajax,Ruby On Rails 4,Rspec,我有几个非javascript规范,它们使用ui创建和编辑记录。 当我运行这些规范时,rspec为每个测试自动删除测试数据库记录 然而,下面的测试是第一个为某些ajax内容设置了:js=>true的测试,它没有在测试之后删除记录,然后测试开始中断,因为启动时数据库不再正确为空。链接和组行仍存在于测试数据库中 # spec/features/verifying_link_spec.rb require 'spec_helper' describe "verification", :js =&g
:js=>true
的测试,它没有在测试之后删除记录,然后测试开始中断,因为启动时数据库不再正确为空。链接和组行仍存在于测试数据库中
# spec/features/verifying_link_spec.rb
require 'spec_helper'
describe "verification", :js => true, :type => :feature do
before :all do
User.create(:username => 'r@google.com', :password => 'esceptio')
end
before :each do
visit '/ladmin/login'
fill_in 'username', :with => 'r@google.com'
fill_in 'password', :with => 'esceptio'
find('input[value="Login"]').click
end
it "lets me verify a link" do
find('div#side div a', text: 'New Group').click
fill_in 'group[group_name]', with: 'Group Add'
click_button 'Save'
find('div#side div a', text: 'New Link').click
fill_in 'link[url_address]', with: 'http://www.a.com/newtest9876link'
fill_in 'link[alt_text]', with: 'abcd9876'
click_button 'Save'
this_year=Time.now.strftime('%Y')
l=Link.first
l.update_attribute(:verified_date, nil)
expect(Link.count).to eq 1
visit links_path
find('a', text: "verify")
click_link("verify", match: :first)
sleep(3)
expect(page).to have_content(this_year)
end
end
现在,我正在使用一种变通解决方案,即使用ui删除记录(如下),但这应该不是必需的
# added at bottom of spec
click_link('Details')
click_link('Delete')
page.driver.browser.switch_to.alert.accept
click_link('Groups')
click_link('Delete')
page.driver.browser.switch_to.alert.accept
我的其他单元测试或功能测试(除了这个js测试)都没有这个问题。它们都会创建自动删除的记录。我强烈建议在测试之间使用gem清理数据库。Rspec将所有内容包装在事务中,并在示例完成后将其回滚。但是,当您开始使用javascript时,您可能会将数据保存在rspec事务之外,然后数据库将永远不会恢复到其原始状态 截断比事务策略慢。但是,您可能只需要JS测试的截断策略。您可以按照以下指南以这种方式设置数据库清理器gem:
如果您发现您的测试需要花费很多时间,那么您可能需要调查一下预装环境的gem。我强烈推荐您是否正在使用数据库?你使用什么来运行JS测试,selenium,phantomjs,chromedriver?我没有使用数据库清理器gem。我正在考虑。虽然我想知道为什么这个测试会有这个问题(而其他测试则没有),但我所做的大部分工作都是为了学习。我还担心在每次测试之间截断数据库的策略,以及是否会影响性能。我使用的是RSpec和水豚,我相信它使用的是硒