2017-11-25 8 views
0

기본 레일 테스트 프레임 워크를 사용하여 몇 가지 기본 레일 테스트 코드를 작성하려고합니다. 내 응용 프로그램은 사용자가 등 내가 포럼을 테스트하기 위해 노력하고Ruby on 레일 테스트 - 테이블 X에 Y라는 이름의 컬럼이 없음

코멘트 (즉, 스레드) 컨트롤러를 스레드를 게시 할 수있는 간단한 포럼입니다, 여기있다 :

require 'test_helper' 

class ForumsControllerTest < ActionController::TestCase 
test "index should be success" do 
    get :index 
    assert_response :success 
end 
end 

forums_controller_test.rb https://www.youtube.com/watch?v=0wIta0fITzc

다음

모든 내 고정 파일 :

comments.yml

나는이 자습서를 비품을 사용하고 있습니다 및 다음입니다

comm_one: 
    body: MyText 
    forum_id: 1 

comm_two: 
    body: MyText 
    forum_id: 2 

forums.yml

for_one: 
    title: MyString 
    body: MyText 
    user_id: 1 

for_two: 
    title: MyString 
    body: MyText 
    user_id: 2 

users.yml

user_one: 
    user_id: '1' 

user_two: 
    user_id: '2' 

난 데 문제는 내가 터미널에서 rake을 실행할 때, 나는이 오류 얻을 수 있습니다 :

Error: ForumsControllerTest#test_index_should_be_success: ActiveRecord::Fixture::FixtureError: table "users" has no column named "user_id".

마이 그 레이션 파일을 볼 필요가 있는지 모르겠지만 다른 정보가 필요하면 알려주십시오.

모든 조언에 감사드립니다.

감사

참고 : 내 사용자 인증을 위해 고안 보석을 사용하고 있습니다. 이것은 users 테이블을 생성하는 데에도 사용되었습니다.

답변

1

구조에 문제가 있다고 생각합니다. 다른 모델에 User가 하나 있거나 User에 속한 경우 user는 user_id 열은 없지만 id는 하나만 가질 수 있습니다. 그러면 user_id 열은 user_id 열을가집니다. 열을 클릭하여 해당 사용자를 가져옵니다. 문서에서 데이터베이스에 있어야하는 구조를 이해하십시오. http://guides.rubyonrails.org/association_basics.html

+1

감사합니다, 나는 ID와이에, USER_ID 변경 나를 다른 문제를 해결 한 후에 문제를 해결하도록 이끌었다. – User59

1

먼저 user_id를 id로 대체하는 Tisamu의 조언에 따라 문제를 해결할 수있었습니다. 그런 다음 사용자 파일에 사용자 이메일을 추가하여 다음과 같이 만들었습니다.

user_one: 
    id: 1 
    email: '[email protected]' 

user_two: 
    id: 2 
    email: '[email protected]' 

이 코드로 문제가 해결되었습니다.

나는 단순히 내 테스트 파일에 Devise::Test::ControllerHelpers을 추가하여이 고정
Error: 
ForumsControllerTest#test_index_should_be_success: 
ActionView::Template::Error: Devise could not find the `Warden::Proxy` instance on your request environment. 
Make sure that your application is loading Devise and Warden as expected and that the `Warden::Manager` middleware is present in your middleware stack. 
If you are seeing this on one of your tests, ensure that your tests are either executing the Rails middleware stack or that your tests are using the `Devise::Test::ControllerHelpers` module to inject the `request.env['warden']` object for you. 
    app/views/forums/index.html.erb:21:in `block in _app_views_forums_index_html_erb___3974819143402431947_37087120' 
    app/views/forums/index.html.erb:15:in `_app_views_forums_index_html_erb___3974819143402431947_37087120' 
    test/controllers/forums_controller_test.rb:6:in `block in <class:ForumsControllerTest>' 

이처럼 만들 :하지만 난 다음이 말하는 오류 메시지가 도착

require 'test_helper' 

class ForumsControllerTest < ActionController::TestCase 
include Devise::Test::ControllerHelpers # <-- Have to include this 
test "index should be success" do 
    get :index 
    assert_response :success 
end 
end