【发布时间】:2014-02-15 19:24:50
【问题描述】:
我正在使用 rspec 和 Factory Girl 进行测试。在测试我的 posts_controller 的 POST #create 部分时,标题中出现错误。
Failures:
1) PostsController POST #create with valid attributes redirects to the post
Failure/Error: response.should redirect_to Post.last
Expected response to be a <redirect>, but was <200>
# ./spec/controllers/posts_controller_spec.rb:59:in `block (4 levels) in <top (required)>'
这是正在测试的规范中的代码。我确信这不是最有效的方法,但它确实有效。
def create
@post = Post.new(
:text => post_params[:text],
:embed => post_params[:embed],
:user => current_user,
:title => post_params[:title],
:tag_list => post_params[:tag_list],
:cagegory_ids => post_params[:category_ids]
)
if @post.save
redirect_to @post
else
render 'new'
end
end
...
private
def post_params
params.require(:post).permit(:title, :text, :embed, :user_id, :tag_list,
:category_ids => [])
end
这里是工厂。
FactoryGirl.define do
factory :post do
title { Faker::Lorem.characters(char_count = 20) }
text { Faker::Lorem.characters(char_count = 150) }
user
categories {
Array(5..10).sample.times.map do
FactoryGirl.create(:category)
end
}
end
end
以及规范的相关部分
describe "POST #create" do
context "with valid attributes" do
it "saves the new post" do
expect{
post :create, post: FactoryGirl.create(:post).attributes
}.to change(Post,:count).by(1)
end
it "redirects to the post" do
post :create, post: FactoryGirl.create(:post).attributes
response.should redirect_to Post.last
end
end
end
另一个测试“保存新帖子”运行良好。我已经尝试过 redirect_to 行的其他变体,例如“redirect_to(posts_path(assigns[:post])),但它会引发相同的错误。
有什么想法吗?
【问题讨论】:
-
如果您能发布您正在点击的控制器代码,那就太好了。
-
是的,我想补充一点。用控制器代码编辑了帖子,但我相信它会更有效。
标签: ruby-on-rails rspec factory-bot