私は簡単なブログのための管理者の名前空間付きコントローラを持っています。私のテストにいくつかのユーザーサポートを追加するとすぐにエラーが返されます。 I LET追加すると(ユーザが):未定義のメソッド `merge! 'はどのように修正するのですか? "a-sample-blog-post"の場合:String
@post = Post.new(params[:post].merge!(:user => current_user))
私の簡単なテストコードが通りである{...}と{...}前に、これは、PostsControllerの線13上にある
Failure/Error: post :create, :post => blog_post
NoMethodError:
undefined method `merge!' for "a-sample-blog-post":String
# ./app/controllers/admin/posts_controller.rb:13:in `create'
# ./spec/controllers/admin/post_controller_spec.rb:13:in `block (4 levels) in <top (required)>'
# ./spec/controllers/admin/post_controller_spec.rb:12:in `block (3 levels) in <top (required)>'
ビット続く:
require 'spec_helper'
describe Admin::PostsController do
describe "new blog post with valid attributes" do
let(:blog_post) { Factory(:post) }
let(:user) { Factory(:user, :admin => true) }
before { sign_in user }
it "should be valid" do
lambda do
post :create, :post => blog_post
end.should change(Post, :count).by(1)
end
end
end
そして、このことができます場合は、ここで私のfactories.rbファイルが
Factory.define :post do |post|
post.title "A sample blog post"
post.content "Duis mollis, est non commodo eget lacinia odio sem nec elit."
end
Factory.define :user do |user|
user.email "[email protected]"
user.password "foobar"
user.admin true
end
で誰かが私を理解するのに役立つことはできますか?
undefined method `merge!' for "a-sample-blog-post":String
そして、それは、それが直接(新しいPostオブジェクトを作成するに近い関連意味とlet(:user)
とは何の関係もありませんあなたのテストのpost :create, :post => blog_post
セクションの間に起こっている:それはあなたを語っています
(おそらく、工場出荷時の女の子の
attributes_for
メソッドを介した)属性のハッシュとblog_post
を交換する必要がありますか? – clyfeoh ... @post = Post.new(params [:post] .merge!(:user => current_user)) – JeffC
おそらく、あなたは 'Factory.build(:post).attributes'を' Factory :post) 'を実行します。 – taro