Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将SessionHelper包括在RailsTutorial.org test_helper中:为什么不?_Ruby On Rails_Ruby_Testing_Railstutorial.org_Helpers - Fatal编程技术网

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