puts和binding.pry输出在测试环境中不可见

时间:2017-05-17 00:58:55

标签: ruby-on-rails testing stdout minitest puts

我使用minitest和rake任务来运行测试。我使用标准记者(这是来自测试帮助者):

Minitest::Reporters.use!(
  Minitest::Reporters::DefaultReporter.new(fast_fail: true, slow_count: 3),
  # show single tests with the spec reporter
  # MiniTest::Reporters::SpecReporter.new,
  ENV, Minitest.backtrace_filter
)

这是我的test.rake:

require 'rake/testtask'

Rake::Task['test:run'].clear
Rake::Task['test:decorators'].clear

namespace :test do
  task run: ['test:decorators', 'test:models', 'test:controllers', 'test:mailers', 'test:integration']

  Rake::TestTask.new(decorators: 'test:prepare') do |t|
    t.pattern = 'test/decorators/**/*_test.rb'
  end
end

我也在Gemfile中安装了pry:

group :pry, :test do
  gem 'pry-rails'
  gem 'pry-byebug'
end

问题我不能在测试中使用它。我可以使用binding_pry添加断点,但是我没有看到调用函数的输出。我也不能使用puts(来自pry和直接来自测试)记录任何内容。我没有在终端或日志文件中看到此输出。我目前唯一可以使用的是Rails记录器。但它并不令人满意。如何显示pry的输出并放入终端?

1 个答案:

答案 0 :(得分:0)

由于您处于测试环境中,因此应用了不同的日志记录设置,而不是默认的rails控制台设置。因此,不是在STDOUT中看到日志,而是在某个文件中(或者您测试env是否已设置)。

要解决此问题,使用pry时,您可以在本地~/.pryrc file for customisation and configuration上设置特定的pry设置。这样做的好处就是不会“污染”您的真实测试环境,而且它只在您的工作站本地。

将它放在〜/ .pryrc文件中:

Pry.config.hooks.add_hook(:before_session, :rails) do
  if defined?(Rails)
    ActiveRecord::Base.logger = Logger.new(STDOUT)
  end
end

取自Active::Record Logger to STDOUT with pry