我是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中运行
答案 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?