AKW*_*KWF 3 testing rspec ruby-on-rails capybara poltergeist
我有以下规格:
# MUST BE TESTED WITH JAVASCRIPT. As you can see before, it is allowing
# the Log Out link. On a real page, that element is hidden.
it "logs out a user" do
user = login_user
click_link user.email
click_link "Log Out"
assert page.has_content?('Logged out')
assert page.has_content?('Company Profile')
end
Run Code Online (Sandbox Code Playgroud)
我的login_user方法在我的spec_helper.rb文件中,如下所示:
def login_user(admin = false)
user = FactoryGirl.create(:user, :admin => admin)
visit login_path
fill_in 'Email', :with => user.email
fill_in 'Password', :with => user.password
click_button 'Go'
assert page.has_content?('Logged in')
user
end
Run Code Online (Sandbox Code Playgroud)
assert当我添加, js: true到我的规范时,最后一次失败.
当我save_and_open_page在它之前做一个正确的时候,Up就会出现没有CSS的页面,因此可能没有JS.由于某种原因,它不是在阅读资产.我认为当你运行测试时,它会像开发模式一样读取资产.我真的需要帮助.
我在这个问题中找到了答案.这非常棘手.我仍然不知道为什么这首先失败了,但不用说RSpec/Capybara/PhantomJS/Poltergeist/Guard/Spork/FactoryGirl有很多活动部件.
请点击链接查看答案.它必须与事务夹具和启用DatabaseCleaner宝石.两次说出答案没有任何好处,我会把那个作为规范的答案.
UPDATE
Run Code Online (Sandbox Code Playgroud)
实际上这个问题与如何在Poltergeist/PhantomJS下不共享数据库连接有关.Plataformatec的员工在他们的博客上有一个优秀的解决方案,不涉及使用DatabaseCleaner gem.
重要的提示
对于同时使用Spork的Postgres用户,博客解决方案将无法按照规定运行.换句话说,如果您将shared_db_connection.rb文件放在spec/support目录中,您将收到一条PG::Error connection closed消息.保留文件spec/support但删除此行:
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
Run Code Online (Sandbox Code Playgroud)
而是将其放在您Spork.each_run的spec_helper.rb文件块中.