Leo*_*Leo 5 testing session ruby-on-rails
使用Rails4进行敏捷Web开发给出了如下示例测试代码:
carts_controller_test.rb:
test "should destroy cart" do
assert_difference('Cart.count', -1) do
session[:cart_id] = @cart.id
...
Run Code Online (Sandbox Code Playgroud)
但是,当我在rails 5中尝试时
>>rake test
Run Code Online (Sandbox Code Playgroud)
引发错误
NoMethodError:nil:NilClass的未定义方法“会话”
如何在Rails 5的测试控制器中使用会话?还是我忽略了一些重要的配置?
在Rails 5中,不再可以在控制器测试中访问会话:http : //blog.napcs.com/2016/07/03/upgrading-rails-5-controller-tests/。建议是访问将为您设置适当会话值的控制器方法。此注释显示了如何解决此限制的示例:https : //github.com/rails/rails/issues/23386#issuecomment-192954569
# helper method
def sign_in_as(name)
post login_url, params: { sig: users(name).perishable_signature )
end
class SomeControllerTest
setup { sign_in_as 'david' }
test 'the truth' do
..
Run Code Online (Sandbox Code Playgroud)
我在无法在 Rails 5 控制器测试中设置会话哈希中找到了答案
Rails5的测试控制器默认继承自ActionDispatch::IntegrationTest,而rails4的测试控制器默认继承自ActionController::TestCase。会话在 ActionDispatch::IntegrationTest 上下文中不可用。