2017-12-27 39 views
0

私はdeviseでレール5を使用しています。私はコントローラ用の単体テストを書くつもりですが、壁にはまっています。ここで私は私のユニットテストは、要求していないときにレコードを挿入しようとしているのはなぜですか?

# GET /issues/new 
    def new 
    unless user_signed_in? 
     redirect_to new_user_session_path 
    end 
    @issue = Issue.new(stop_onestop_id: params[:stop_id], line_onestop_id: params[:line_id]) 
    end 

をテストしようとしていると、ここで私はそれを実行したとき、私は

# issues_controller_test.rb 
class IssuesControllerTest < ActionDispatch::IntegrationTest 

    include Devise::Test::IntegrationHelpers 

    test "logged in should get issues page" do 
    sign_in users(:one) 
    test_stop_id = 1 
    test_line_id = 1 
    get new_issue_url, params: {stop_id: test_stop_id, line_id: test_line_id} 
    assert_equal test_stop_id, @issue.stop.id 
    assert_equal test_line_id, @issue.line.id 
    assert_response :success 
    end 
end 

を書いてテストがしかし、私は以下の例外を取得しています...

localhost:Caravan-App davea$ rails test 
Running via Spring preloader in process 9509 
Run options: --seed 48437 

# Running: 

E 

Error: 
IssuesControllerTest#test_logged_in_should_get_issues_page: 
ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: UNIQUE constraint failed: users.email: INSERT INTO "users" ("created_at", "updated_at", "id") VALUES ('2017-12-27 19:07:16.234345', '2017-12-27 19:07:16.234345', 298486374) 



bin/rails test test/controllers/issues_controller_test.rb:6 



Finished in 0.320746s, 3.1177 runs/s, 0.0000 assertions/s. 

1 runs, 0 assertions, 0 failures, 1 errors, 0 skips 
方法があります

いいえどこに新しいレコードを作成するのが欲しいのですか?私のテストはなぜ挿入しようとしていますか?

+1

'users(:one)'がテストフィクスチャをつかんでいます。あなたの 'users.yml'フィクスチャファイルをチェックしましたか?独自の電子メールの制約に違反しているかもしれません。 –

+0

'redirect_to new_user_session_path'を' redirect_to new_user_session_pathに変更して返してください ' –

+0

@DerekHopper、tahtのフィクスチャファイルでうまくいってください。それは確かに問題でした。 – Dave

答えて

1

sign_in users(:one)の行では、users(:one)がフィクスチャをフェッチしています。見ていると、フィクスチャファイルを使用していることがわかります。

プロジェクトには、テスト用のユーザーを定義するファイルusers.ymlがあります。 ActiveRecord::RecordNotUniqueの例外がそこから来ているようです。より具体的には、ユーザフィクスチャはusers.emailの一意性制約に違反しているように見えます。

users.ymlファイルを修正する場合は、各ユーザーに固有の電子メールアドレスを指定してください。

関連する問題