我在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
,因为默认排序可能是创建日期之外的其他内容。
答案 0 :(得分:2)
如果控制器有一个名为@user
的实例变量,那么我们可以通过assigns(:user)
在RSpec中访问它。
答案 1 :(得分:1)
在控制器测试中比较records
或objects
并不是一个好主意。在控制器create
测试中,您应该测试正确的重定向和更改记录。
您可以在模型测试中轻松compare
您的对象,因为您可以轻松跟踪您的记录。
如果action
的{{1}}有variable
,则可以从测试中访问创建的记录
在控制器中
record
在测试中
def create
@user = #assign user
end
您可以查看this article