1

リクエストの仕様を機能させようとして立ち往生しています。Google と SO で見つけたさまざまなアプローチをいくつか試しました。以下は、リクエスト仕様で個別に試した次のヘルパーです。

#spec/support/devise_request_spec_support.rb
module DeviseRequestSpecSupport

  def login(user)
    post user_session_path, login: user.email, password: 'foobar'
  end
end

#spec/support/utilities.rb
include ApplicationHelper

def valid_login(user)
  fill_in "user[email]", with: user.email
  fill_in "user[password]", with: 'foobar'
  click_button "Sign in"
end

def login(user)
  visit root_path
  valid_login(user)
end

#login以下のリクエスト仕様で、上記の両方の方法を別々に試しました。

require 'spec_helper'

describe "Company Admin Dashboard", js: true do
    let(:user) { Fabricate(:company_admin) }

    before do
        login(user)
        poll = Fabricate(:poll)
        poll.send_to_all_users
    end

  describe "interacting with the poll box" do
    it "displays sent poll in poll box" do
      visit root_path
    end
  end
end

テストはパスしますが、root_path にはログイン ユーザー向けのランディング ページが表示されません。パブリック ランディング ページが表示されます。binding.pry を使用してデバッグを試み、テスト環境で手動でログインしようとしましたが、「無効な電子メールまたはパスワード」エラーが発生し続けます。何度も確認しましたが、偽造された company_admin の正しいメールアドレスとパスワードを使用しています。

ここで提案されているソリューションも試しました: https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara

どんな助けでも大歓迎です。問題がどこにあるのかわかりません。ファブリケーション ジェム、Devise、RSpec、またはカピバラですか?

4

2 に答える 2

0

「let!」を使ってみてください。「let」の代わりにユーザーを作成します。「let」の遅延バージョンを使用しているため、ログインしようとしたときにユーザーが作成されていない可能性があります。

于 2013-03-01T05:13:20.207 に答える
0

私は一度同じエラーがありました。私のエラーが突然現れて、それは大きな驚きでした。テストする同じ宝石があることに注意してください: Devise、RSpec、Capybara、FactoryGirl (Fabrication の代わり)。

しかし、私たちの問題には違いがあります。エラーが突然表示されたので、マスターを以前のコミットに戻した別のブランチを作成したところ、spec_helper.rb を変更したことがわかりました (ガベージコレクターの無効化を実装しました)。コミットを元に戻し、テストに合格しました。

次のことを試すことができると思います:

1) テストに使用しているすべての gem が最新であることを確認します。bundle outdated

2)に変更visit root_pathしてみてくださいvisit '/'

3) を起動rails c testし、テスト ユーザーを作成して、保存したパスワードがテストのものと一致することを確認します。ここでその方法を確認してください

4) 何も役に立たない場合は、Fabrication の代わりに FactoryGirl を使用してみてください

于 2013-04-20T14:44:20.427 に答える