数据库未设置:js =>真正

时间:2013-07-22 01:12:37

标签: ruby-on-rails rspec capybara

使用下面的代码,我的浏览器将启动测试。我可以看到渲染的页面。页面上缺少应该在数据库中的项目。为什么我的数据库没有填充?

当我摆脱“:js => true”时,数据库已设置好..但测试失败,因为我需要javascript来点击表格行。

require 'spec_helper'

feature "[user can add analysis to a line]", :js => true do

  context "[User signed in]" do

    scenario "[user can visit home page click on a line and add analysis]"  do

      puts "** Add analysis feature spec not working **"

      jim = Fabricate(:user)
      sign_in(jim)
      nfl = Fabricate(:league, name: "NFLXX")
      nba = Fabricate(:league, name: "NBA")
      nhl = Fabricate(:league, name: "NHL")
      mlb = Fabricate(:league, name: "MLB")
      nfl_event1 = Fabricate(:event, league: nfl, home_team: "Eagles")
      nfl_event2 = Fabricate(:event, league: nfl, home_team: "Jets")
      nba_event = Fabricate(:event, league: nba, home_team: "Sixers")
      nhl_event = Fabricate(:event, league: nhl, home_team: "Flyers")
      mlb_event = Fabricate(:event, league: mlb, home_team: "Phillies")

      visit(posts_path)    
      find('.league-text').click_link("All")
      page.all('.vegas-line')[0].click
      click_link("ADD Analysis")
      fill_in('post_title', :with => "This is my analysis")
      fill_in('post_content', :with => "This is a long analysis for this game. If you like it you should say something to me")
      click_button('post')
      page.should have_content "Post submitted sucessfully"

    end

  end
end

1 个答案:

答案 0 :(得分:1)

我认为您遇到的问题是,当您使用JavaScript运行测试时,您的测试代码和应用程​​序服务器代码在不同的线程中运行,因此不会共享相同的数据库连接。

如果使用默认配置运行rspec-rails,您将使用数据库事务进行清理(测试包含在最后回滚的事务中)。这不适用于多个线程或进程。见https://github.com/jnicklas/capybara#transactions-and-database-setup

解决此问题的最常用方法是使用数据库清理程序gem - https://github.com/bmabey/database_cleaner