Ruby on rails 3 如何编写不考虑质量分配的rspec控制器规格型号模拟

Ruby on rails 3 如何编写不考虑质量分配的rspec控制器规格型号模拟,ruby-on-rails-3,rspec2,Ruby On Rails 3,Rspec2,我使用rspec测试一个控制器,该控制器使用一个声明了attr_accessible的模型。我不想测试attr_accessible是否正常工作(我的模型规范就是这样做的),但我确实想确保我的控制器没有进行大规模分配 具体来说,我有一个这样的模型: class Post < ActiveRecord::Base attr_accessible :body validates :body, :presence => true, validates :user,

我使用rspec测试一个控制器,该控制器使用一个声明了attr_accessible的模型。我不想测试attr_accessible是否正常工作(我的模型规范就是这样做的),但我确实想确保我的控制器没有进行大规模分配

具体来说,我有一个这样的模型:

class Post < ActiveRecord::Base
  attr_accessible :body
  validates :body,    :presence => true,
  validates :user,    :presence => true
  belongs_to :user
end
我有一个模拟控制器的rspec测试,通过了上面的测试:

describe "POST create" do
  describe "with valid params" do
    it "assigns a newly created post as @post" do
      Post.stub(:new).
        with({'body' => 'hi there', 'user' => @user}) { mock_post(:save => true) }
      post :create, :post => {'body' => 'hi there'}
      assigns(:post).should be(mock_post)
    end
  end
end
我想做的是更改rspec测试,以便在注释掉第一行@post并取消注释下面两行@post时正确验证控制器。这样,我将验证控制器是否能与真实模型一起正常工作,但我可以继续使用模拟进行测试。我已经尝试了几种方法,似乎在兜圈子(是的,我是Rails和Rspect:p的新手)


非常感谢

检查质量分配。你需要复制它。因此,请在请求中发送错误的用户id

post :create, :post => {'body' => 'hi there', 'user_id' => '2'}
然后确保您创建的帖子具有控制器分配的用户\u id(在本例中假设其id不是2)


当然,这会让rspec感到高兴,但它会测试我的控制器代码没有使用质量分配吗?啊,错过了质量分配参考。更改答案
post :create, :post => {'body' => 'hi there', 'user_id' => '2'}
assigns(:post)user_id.should be(current_user.id)