功能测试:NomethodError

时间:2014-10-28 10:29:15

标签: ruby-on-rails ruby

我是ruby on rails(和英语:))的初学者,我尝试使用功能测试,但我在拳头时出错了

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中,但它没有用。 那么,在哪里可以找到用于功能测试的微博方法,我该如何解决?请帮帮我?

p / s:我的应用程序仍在localhost中运行

1 个答案:

答案 0 :(得分:1)

如果您使用设计进行用户身份验证,则需要在current_user中对MicropostController进行身份验证并设置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

在您的测试中,您需要按照以下方式导入设计测试助手,如果您尚未在class MicropostControllerTest < ActionController::TestCase include Devise::TestHelpers end

中完成测试助手。
sign_in

然后,您可以使用{{1}}方法在测试中使用Fixtures登录用户。搜索一些关于此的教程或在此处查看响应以获得一些线索:Functional testing with Rails and Devise. What to put in my fixtures?