2017-03-08 5 views
0

ログインシステムが正しく動作することをテストしようとしています。私はテストユーザーと一緒にユーザーフィクスチャを作成しました。Railsは、nullとして表示されるフィクスチャのユーザの電子メールを表示します。

テスト/器具/ users.yml

dave: 
    name: Mr Dave 
    email: [email protected] 
    password_digest: <%= User.digest('password') %> 

Iは、ユーザログインおよびログアウトをテストログインシステムのためのユニットテストを作成しました。

テスト/統合/ site_layout_test.rb

require 'test_helper' 

def setup 
    @user = users(:dave) 
end 

... 

    test "login with valid information followed by logout" do 
    get login_path 
    post login_path, params: { session: { email: @user.email, 
              password: 'password' } } 
    assert is_logged_in? 
    assert_redirected_to @user 
    follow_redirect! 
    assert_template 'users/show' 
    assert_select "a[href=?]", login_path, count: 0 
    assert_select "a[href=?]", logout_path 
    assert_select "a[href=?]", user_path(@user) 
    delete logout_path 
    assert_not is_logged_in? 
    assert_redirected_to root_url 
    follow_redirect! 
    assert_select "a[href=?]", login_path 
    assert_select "a[href=?]", logout_path,  count: 0 
    assert_select "a[href=?]", user_path(@user), count: 0 
    end 
end 

私はNilClassための電子メールの方法が存在しないというエラーを取得し、テストを実行しようとします。

Error: 
SiteLayoutTest#test_login_with_valid_information_followed_by_logout: 
NoMethodError: undefined method `email' for nil:NilClass 
    test/integration/site_layout_test.rb:35:in `block in <class:SiteLayoutTest>' 

はなぜRailsは私が備品フォルダに追加したユーザーを拾っていませんか?

+0

テストファイル全体を投稿できますか? – Iceman

+0

とにかく、私の推測では、 'setup'はテストスイートクラスの外にあり、実行されていないと考えられます。 – Iceman

+1

あなたの推測は正しいです。それは可能であり、真実でもあります。 –

答えて

0

を持っているなら、私に知らせて、正しい方向にあなたを置くべきだと思います。クラス宣言の内側に移動すると、スムーズに動作します。

class SomeTest < ActionDispatch::IntegrationTest 
    def setup 
    @user = users(:dave) 
    end 
-1

私はそれはあなたがまだ理由はsetupは、テストクラスの外にあるため、実行されないということである問題How to create a test user in test/fixtures/user.yml that can be used for integration test in Devise 4?

+0

私はどの部分を見ているべきかわからない。私のroutes.rbファイルには、次のような ''/login ''が含まれています: 'sessions#new' 投稿 '/ login'、 'sessions#create''これまでのところ、あなたがリンクしている質問のコードに問題がありました。あるいは、あなたはその質問について別のことを意味しましたか? –

+0

私はあなたのテストが正しくセットアップされなかったという事実を指摘していました。上記のIcemanが指摘しているように、あなたの 'setup'はテストクラスの外にあったため正しく動作しませんでした。 –

+0

私は参照してください。私はあなたがなぜそれを指摘するよりもむしろヒントしたいと思うかもしれない理由を理解することができます。最新のAngularの開発に取り掛かっているGoogleの開発者は、最近、@Componentという変数を '@Component'の代わりに変数名として表示しました。 )。しかし、問題の解決策が明示的に述べられていれば、私はあなたの答えを受け入れて、投票することができてしまいました。 –

関連する問題