在rails集成测试中验证控制器分配的变量

mic*_*ski 2 testing ruby-on-rails

我开始使用Rails,目前我仍然坚持对控制器进行集成测试.

我正在尝试验证如果某个值是由表单中的用户提供的,Active Record会生成错误并将这些错误传递给视图.

我的问题是我不知道如何在集成测试中访问控制器分配的变量(例如 - @user).正如我在http://guides.rubyonrails.org/testing.html#what-to-include-in-your-functional-tests中读到的那样,我可以访问变量,例如@controller,@ request,@ response,但我也期待我可以轻松访问控制器分配的变量.

不幸的是,例如:*@user*@ controller.user

不真正的工作: - /

tje*_*den 11

Rails版本<5.0

您可以使用assigns带有变量名称符号作为参数的方法来访问这些变量.例如:

assigns(:user) 
Run Code Online (Sandbox Code Playgroud)

给你@user控制器的价值.

Rails版本> 5.0

在rails 5.0中assigns并且assert_template已经被_depracted,所以为了像以前一样使用它你需要添加:

gem 'rails-controller-testing' 
Run Code Online (Sandbox Code Playgroud)

到你的Gemfile.

最初讨论为什么使用assigns是一个坏主意.