2014-10-28 186 views
0

我是Ruby on Rails中一個初學者(英文:)),我嘗試使用功能測試,但我在拳功能測試:NomethodError

1)Error: 
test_should_get_new(MicropostControllerTest) 
NoMethodError: undefined method 'microposts' for nil:NilClass 

我micropost_controller_test.rb錯誤

require 'test_helper' 
class MicropostControllerTest < ActionController::TestCase 
    test "should get new" do 
    get :new 
    assert_response :success 
    end 
end 

我micropost_controller.rb

class MicropostController < ApplicationController 
    def new 
    @post = Micropost.new 
    @posts = current_user.microposts.all 
    end 
    def create 
    @post = current_user.microposts.create(:content => params[:content]) 
    logger.debug "New post: #{@post.attributes.inspect}" 
    logger.debug "Post should be valid: #{@post.valid?}" 
    if @post 
    redirect_to micropost_new_path 
    else 
    end 
    end 
end 

我試圖把東西microposts.yml,但沒有奏效。 所以,我可以找到功能測試microposts方法,我該如何解決?請幫幫我?

P/S:我的應用程序仍然在本地主機

+1

'current_user'返回'nil'。 – 2014-10-28 10:30:33

+0

@mayoneQD你在控制器中提到'current_user',但是在測試控制器規範中你沒有指定任何用戶,所以它是空的嘗試在執行測試之前定義'user' – anusha 2014-10-28 10:53:12

+0

@anusha謝謝,我理解,但是我試圖設置用戶=用戶(:一),但它沒有工作 – mayoneQD 2014-10-29 02:33:46

回答

1

工作,如果你正在使用設計用戶認證,那麼你需要進行身份驗證,並在您MicropostController設置current_user,通過例如具有before_action如下:

class MicropostController < ApplicationController 
    before_action :authenticate_user! 

    def new 
    @post = Micropost.new 
    @posts = current_user.microposts.all 
    end 
# rest of the code 
end 

在您的測試,你需要導入色器件測試助手如下,如果你在你的test_helper

沒有完成它

然後,您可以使用sign_in方法在測試中使用Fixtures登錄用戶。搜索一些教程或者在這裏查看回復以獲得一些線索:Functional testing with Rails and Devise. What to put in my fixtures?

+0

你的答案是relly幫助,我可以學到更多,雖然它現在不工作,但我認爲我應該更努力地找出:) – mayoneQD 2014-10-29 02:57:54