Ruby on rails 将SessionHelper包括在RailsTutorial.org test_helper中:为什么不?
在,: 建议创建一个重复的方法来检查当前用户是否已登录(已经在Ruby on rails 将SessionHelper包括在RailsTutorial.org test_helper中:为什么不?,ruby-on-rails,ruby,testing,railstutorial.org,helpers,Ruby On Rails,Ruby,Testing,Railstutorial.org,Helpers,在,: 建议创建一个重复的方法来检查当前用户是否已登录(已经在sessions\u helper.rb中定义了这样的方法)以用于测试。然而,我想知道为什么作者一开始就选择这样做。他这样解释他的推理: 要从中测试行为,我们可以在测试中添加一行,以检查用户是否登录。在这种情况下,定义一个is_logged_有帮助吗?帮助器方法来并行已登录的\u?中定义的helper,如果(测试)会话中有用户id,则返回true,否则返回false()。(因为helper方法在测试中不可用,所以我们不能使用中的当前用
sessions\u helper.rb
中定义了这样的方法)以用于测试。然而,我想知道为什么作者一开始就选择这样做。他这样解释他的推理:
要从中测试行为,我们可以在测试中添加一行,以检查用户是否登录。在这种情况下,定义一个is_logged_有帮助吗?帮助器方法来并行已登录的\u?中定义的helper,如果(测试)会话中有用户id,则返回true,否则返回false()。(因为helper方法在测试中不可用,所以我们不能使用中的当前用户,但是session方法可用,所以我们使用它。)这里我们使用的是_登录吗?而不是登录?因此,测试助手和会话助手方法具有不同的名称,这可以防止它们相互误认
但是,在第5章的练习中,作者在其测试套件中编写了代码,包括ApplicationHelper
(请参阅):
当我包括
sessionhelper
并使用该helper模块中的代码运行测试时,我的测试仍然通过。我想知道作者是否选择放弃在代码中包含sessionhelper
,因为该技术在练习中使用过(因此最好应用到其他地方),或者出于某种原因将sessionhelper
实际包含到测试套件中是件坏事。对此有何见解?在阅读了第8章之后,我发现测试用户是否使用登录的代码登录?
(即!current\u user.nil?
)在某种程度上不适用于测试,因此方法current\u user
实际上不起作用(即,它总是以某种方式返回true
)。虽然我不知道确切的原因;我是根据这句话写的:
(因为helper方法在测试中不可用,所以我们不能使用清单8.15中的当前用户,但是session方法可用,所以我们使用它。)
因此,在测试中基本上使用current\u user
方法将不起作用,因为它在测试中不可用?(我想我把它们包括在test\u helper.rb
中,并在include sessionhelper
行中
这是我现在的答案。如果有一个比我更有知识的人能够证实这一问题的内部运作,那将是一件好事
编辑:好的,我认为这是因为current_user
方法使用@current_user | |=user.find_by(id:user_id)
但是user
数据库在开发和测试之间是不同的
ENV['RAILS_ENV'] ||= 'test'
.
.
.
class ActiveSupport::TestCase
fixtures :all
# Returns true if a test user is logged in.
def is_logged_in?
!session[:user_id].nil?
end
end
ENV['RAILS_ENV'] ||= 'test'
.
.
.
class ActiveSupport::TestCase
fixtures :all
include ApplicationHelper
.
.
.
end