使用RSpec 3和Rails 4在控制器测试中查找新创建的记录

我在Rails 4中做了一个控制器规范,我想测试由控制器动作创建的记录的属性。 如何找到新创建的记录?

例如,我可以做什么而不是

it 'Marks a new user as pending' do post :create, params # I don't want to use the following line user = User.last expect(user).to be_pending end 

Rails指南仅简要讨论了控制器测试,其中提到测试Article.count变化为1,而不是如何获得新的ActiveRecord模型。

在Rails 3中找到最新记录的问题是关于Rails 3。

我不愿意使用User.last ,因为默认排序可能是创建日期之外的其他内容。

如果控制器有一个名为@user的实例变量,那么我们可以通过@user assigns(:user)在RSpec中访问它。

在控制器测试中比较recordsobjects不是一个好主意。 在控制器create测试中,您应该测试正确的重定向和更改记录。

您可以在模型测试中轻松compare对象,因为您可以轻松跟踪记录。

如果你的action有一个保存recordvariable ,你仍然可以从测试中访问创建的record

在控制器中

  def create @user = #assign user end 

在测试中

 assigns(:user).name.should eq "Name" # If it has a name attribute assigns(:user).pending.should be_true # I don't know how you implemented pending 

你可以看看这篇文章