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

时间:2015-09-23 04:47:12

标签: ruby-on-rails ruby-on-rails-4 rspec actioncontroller rspec3

我在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 guides仅简要讨论控制器测试,其中提到测试Article.count的变化为1,而不是如何获得新的ActiveRecord模型。

问题Find the newest record in Rails 3是关于Rails 3的。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

如果action的{​​{1}}有variable,则可以从测试中访问创建的记录

在控制器中

record

在测试中

 def create 
   @user = #assign user
 end

您可以查看this article