0

以下のコードで、ブラウザがテストのために起動します。レンダリングされたページが表示されます。データベースにあるはずのアイテムがページにありません。データベースにデータが入力されないのはなぜですか?

「: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
4

1 に答える 1

1

問題は、JavaScript を使用してテストを実行する場合、テスト コードとアプリケーション サーバー コードが別々のスレッドで実行されているため、同じデータベース接続を共有していないことだと思います。

デフォルトの設定で rspec-rails を実行している場合、クリーンアップにデータベース トランザクションを使用します (テストは、最後にロールバックされるトランザクションにラップされます)。これは、複数のスレッドまたはプロセスでは機能しません。https://github.com/jnicklas/capybara#transactions-and-database-setupを参照してください

この問題を解決する最も一般的な方法は、データベース クリーナー gem - https://github.com/bmabey/database_cleanerを使用することです。

于 2013-07-22T07:47:05.460 に答える