看着别人的代码后,我注意到以下几点:宝石管理员,为什么我需要范围:在login_as helper?
login_as user, scope: :user
我一直使用简单
login_as user
所以我就出去找一个解释,并发现这篇文章How to: Test with Capybara,说使用然而,没有任何解释。没有它,我所有的测试都能正常工作。
另一个奇怪的是我也没有使用的Warden.test_mode!
。为什么我需要它?
任何解释?
看着别人的代码后,我注意到以下几点:宝石管理员,为什么我需要范围:在login_as helper?
login_as user, scope: :user
我一直使用简单
login_as user
所以我就出去找一个解释,并发现这篇文章How to: Test with Capybara,说使用然而,没有任何解释。没有它,我所有的测试都能正常工作。
另一个奇怪的是我也没有使用的Warden.test_mode!
。为什么我需要它?
任何解释?
正如你可以看到here,login_as
电话set_user
用同一套方案。
这是set_user
的source code(点击“查看源代码”)。在第165行,您会看到如果:scope
选项为空,则将使用默认范围。在你的Rails应用程序,打开config/initializers/devise.rb
,你会如下
# Configure the default scope given to Warden. By default it's the first
# devise role declared in your routes (usually :user).
# config.default_scope = :user
这意味着你的默认范围是:user
当你调用login_as
没有通过范围这是用来找到。
2.
这里是Warden.test_mode!
.test_mode的文档! ⇒对象
向监督员提供帮助方法进行测试。
要在测试模式下设置warden,请调用test_mode!方法
这将提供许多方法。 Warden.on_next_request(& blk) - 捕获一个块,在下一个请求中产生代理代理 Warden.test_reset! - 删除任何已被 在下一个请求中执行的捕获块
Warden.test_reset!块RSpec的,或用于测试::单位 拆卸方法
这意味着,如果你确定你不需要/使用任何由监狱长提供的辅助方法为上市后不应该被称为在调用这个方法不会破坏你的测试。