我在脚本中放了几个puts
语句。但邮件没有打印出来;脚本正在传递这些语句。我观察执行进入rake的时刻puts
在整个流程中都不起作用。
在规范助手
中class Testbed
puts "Inside test bed" // This puts is printed
some code
some code
some code
some code
end
RSpec.configure do |config|
puts "In side rspec config" // This puts is printed
config.color = true
config.tty = true
some code
some code
some code
some code
end
config.before(:all) do
puts "in before all"//not printed
这里的puts
个语句都没有打印输出。我在页面对象中puts
,不考虑规范文件。
任何人都可以为此建议解决方法吗?
答案 0 :(得分:3)
默认考虑puts
输出的位置。 It uses $stdout
除非您已将其告知use a different channel,例如:
File.open('foo', 'w') do |fo|
fo.puts 'bar'
end
当它使用$stdout
或STDOUT
时,一个调用程序,特别是在子shell中使用Ruby的程序,可以捕获输出并用它做它想做的事情。这是操作系统的一个功能。如果我有代码,则此代码保存在'test.rb'中:
puts 'foo'
并从shell调用它:
ruby /path/to/test.rb > /some/file.txt
输出将通过管道传输到/some/file.txt,我不会在控制台上看到它。同样,如果我有第二个应用程序调用第一个应用程序:
output = %x[ruby /path/to/test.rb]
变量output
将包含从子shell的STDOUT中重新路由捕获的文本'foo'
。
有很多方法可以做到这一点,从使用反引号或%x[...]
到使用popen
或常规open
命令中的管道到Open3中的方法。在打开文件时讨论文件名,IO docs说:
以“|”开头的字符串表示子进程。 “|”后面的字符串的其余部分被调用为具有连接到它的适当输入/输出通道的进程。
所以,问问我们为什么puts
没有输出到你的控制台是不容易回答的,但你可以看到,如果有东西直接调用你的代码,那么它就很容易完成。
答案 1 :(得分:0)
任何人都可以为此建议解决方法吗?
首先,如何关注所有错误?
`<main>': undefined method `config' for RSpec:Module (NoMethodError)
您的代码执行此操作:
RSpec.configure do |config|
puts "In side rspec config" // This puts is printed
config.color = true
config.tty = true
end
...并且配置变量仅在块内定义。但是你写下这个:
config.before(:all) do
puts "in before all"//not printed
end
该代码不在块内,因此配置变量不存在。
接下来,before()只在其他测试之前执行 - 但是你没有测试,因为rspec输出显示:
$ rspec 1.rb
Inside test bed
In side rspec config
No examples found. #*********HERE
Finished in 0.00032 seconds (files took 0.0879 seconds to load)
0 examples, 0 failures #*******HERE
试试这个:
class Testbed
puts "Inside test bed" #This puts is printed
end
RSpec.configure do |config|
puts "In side rspec config" #This puts is printed
config.color = true
config.tty = true
config.before(:all) do
puts "in before all" #?????
end
end
#Here is an rspec test:
RSpec.describe do
it "some test" do
end
end
...
~/ruby_programs$ rspec 1.rb
Inside test bed
In side rspec config
in before all #Yeah!!
.
Finished in 0.00073 seconds (files took 0.4294 seconds to load)
1 example, 0 failures