2

JS を使用するテストを行う前に、ユーザーにサインインする必要があります。サインイン ページは機能します (このテストを除く)。

require 'spec_helper'
require 'capybara/poltergeist'
include Capybara::DSL
Capybara.javascript_driver = :poltergeist    

describe "Application", js: true  do
  describe "when logged in", js: true do
    let(:user) { FactoryGirl.create(:user) }
    before do
      visit signin_path
      fill_in "Email", with: user.email
      fill_in "Password", with: user.password
      click_button "Sign in"
    end
    it "can authenticate user" do
      User.all.first.authenticate(user.password).email.should == user.email
    end
  end
end

問題は、「サインイン」ボタンをクリックすると、「無効なユーザー/パスワード」の組み合わせでページに戻ることです (ユーザーがデータベースに存在しないかのように)。問題は、どうやら使用が実際にデータベース内にあり、パスワードが正しいことです (「ユーザーを認証できる」というテストに合格します)。

「サインイン」ボタンをクリックする前にスクリーンショットを撮りましたが、フィールドは正しく入力されています。before ブロック内にユーザーを作成しようとしましたが、うまくいきませんでした。

サインイン ページには特別なものはなく、javascript も何もありません。サーバーへの通常のフォームの投稿。

何か案は?

4

1 に答える 1

7

これは、少し前に and を使用しているときに私に起こっていましrspecpoltergeist。問題は、スレッドがデータベースでphantomjs作成されたレコードを表示できなかったことです。FactoryGirlこの問題を解決するには、spec_helper.rb以下のコードを追加して、db 接続を共有するように構成する必要があります。

class ActiveRecord::Base
  mattr_accessor :shared_connection
  @@shared_connection = nil

  def self.connection
    @@shared_connection || retrieve_connection
  end
end

# Forces all threads to share the same connection. This works on
# Capybara because it starts the web server in a thread.
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection

詳細については、ポイント番号 3 を参照してください。

于 2013-05-06T20:33:27.917 に答える