当前位置: 首页 > 知识库问答 >
问题:

如何从Rspec功能规范测试Rails日志记录?

海景曜
2023-03-14

这个问题告诉我如何从RSpec模型和控制器规范测试记录器语句。不幸的是,它似乎不适用于功能规范。使用以下代码:

# controller.rb
def action
  logger.info 'foobar'
end

# spec.rb
scenario 'logging should work' do
  expect(Rails.logger).to receive(:info).with('foobar')
  visit action_path
end

我得到一个错误:

 Failure/Error: visit action_path
   #<ActiveSupport::Logger:0x007ff45b6e5ad0> received :info with unexpected arguments
     expected: ("foobar")
          got: (no args)

测试。日志文件不包含foobar,因此在控制器操作有机会完成之前,测试似乎立即失败。

有没有办法在功能规范中使用这种期望(Rails.logger)语法?

共有1个答案

太叔涵亮
2023-03-14

Rails.logger.info方法可以采用字符串或块。如果您正在调用块形式,那么它将给出"get:(no args)"输出。

举个例子

logger.info 'foobar'

...所有人都在同一条线上。带有字符串的信息,但如果您这样做

logger.info
  "foobar foobar longer message so I'll put it on its own line"

在没有括号的情况下,将两条线分开,那么您实际上通过了一个块。添加一些括号。。。

logger.info(
  "foobar foobar longer message so I'll put it on its own line"
)

...你又回到了一条绳子上。

在对这个问题猛烈抨击了几个小时后,他心知肚明地说:——)

在意识到这一点之前,我开始思考如何模拟铁轨。记录器类。这对你或其他人来说可能是一个有用的方法。也许你打电话是因为其他原因(与功能与控制器规格有关?),或者你不能更改调用代码,在这种情况下。。。类似的内容可能是一个有用的起点:

class LoggerMock < Object
  def initialize; end

  def info(progname = nil, &block)
    mock_info(block.call)
  end
end

logger_mock = LoggerMock.new
allow(Rails).to receive(:logger).and_return(logger_mock)
expect(logger_mock).to receive(:mock_info).with('foobar')
 类似资料:
  • 我可以从控制器规格访问当前用户,没有问题。从Rspec内部。功能规范,我无法使当前用户可用。 我需要当前用户的原因是,我正在测试发送邀请功能。我导航到发送邀请的页面,填写邀请[to_user]字段,然后单击“发送邀请”。我想确保页面上显示正确的flash消息。但是,我正在通过单击“发送邀请”触发的控制器操作中将发送者\u id设置为当前\u用户id,我需要在此处定义当前\u用户。 我设置了支持/控

  • 问题内容: 当我们从本地群集运行时,我想关闭默认提供的日志记录功能。当前,它在控制台上记录了很多信息。 以下是日志示例: 在阅读了许多文档之后,我得到了以下代码,我可以从类中关闭日志记录。 输出(正确): 但是我需要更改Storm / zookeper等的日志记录配置。 有人可以帮忙吗? 更新 :以下是我尝试过的代码,但是它不起作用。我尝试使用0.7.1、0.8.2和0.9.0-wip *版本 问

  • 我有一个控制器方法,它使用<code>redirect_to:back<code>将用户重定向回原始页面。方法如下所示。 我试图为有效和无效的创建方法编写一个集成测试。下面给出了集成测试。 我得到以下与。 我尝试在创建方法中使用HTTP REFERRER(如下所述)而不是redirect_to:back,但我仍然收到错误。 我不确定我需要改变什么来通过redirect_to :back的测试。我曾

  • 问题内容: 我正在做一个Junit教程,遇到了正在测试的标准化函数。定义如下: 此功能如何工作?它实际上在做什么? 问题答案: 它与以下功能相同: 除了所有操作都是通过反射执行的。

  • This is a sample functional specification, a part of Joel on Software, a site about software management. It is intended for educational purposes, not to refer to a real product, in case you didn't not

  • 问题内容: 这是一个第三方应用程序,在我们的应用程序服务器上生成大量的登录信息。像这样: 如何关闭slf4j的输出?我已经在.war文件中查找了slf4j的一些配置,但没有找到任何配置。他们的网站也没有帮助 问题答案: slf4j只是实际日志后端(此处是覆盖jakarta commons日志记录)的一个漏斗,这是您必须配置的摆脱某种消息的程序。对于登录,这是适当的配置代码段: 对于log4j,它非