我正在为我的rails应用程序编写测试。 我只想看到'。'当rspec运行时,和'*'符号。 但我正在观看HTTP日志,不知道如何禁用它们。 我终端输出的一块rspec:
.............get http://0.0.0.0:3000/device_info/?api_session=%23%7Bapi_session%7D
User-Agent: "Faraday v0.8.7"
404
content-type: "text/html"
x-cascade: "pass"
connection: "close"
server: "thin 1.5.1 codename Straight Razor"
.....get http://0.0.0.0:3000/device_info/12345?api_session=%23%7Bapi_session%7D
User-Agent: "Faraday v0.8.7"
400
..
.............get http://0.0.0.0:3000/device_info/?api_session=%23%7Bapi_session%7D
User-Agent: "Faraday v0.8.7"
404
content-type: "text/html"
x-cascade: "pass"
connection: "close"
server: "thin 1.5.1 codename Straight Razor"
.....get http://0.0.0.0:3000/device_info/12345?api_session=%23%7Bapi_session%7D
User-Agent: "Faraday v0.8.7"
400
..
我认为原因可能是'法拉第'宝石的配置。 如何从我的rspec输出中禁用此日志?
答案 0 :(得分:11)
法拉第默认不记录任何内容:
irb(main):001:0> require "faraday"
=> true
irb(main):002:0> Faraday.get 'http://sushi.com/nigiri/sake.json'
=> #<Faraday::Response:0x007ff48f0422a8 @env={:method=>:get, :body=>"", :url=>#<URI::HTTP:0x007ff48f03bd40 URL:http://sushi.com/nigiri/sake.json>, :request_headers=>{"User-Agent"=>"Faraday v0.8.7"}, :parallel_manager=>nil, :request=>{:proxy=>nil}, :ssl=>{}, :status=>302, :response_headers=>{"date"=>"Thu, 25 Jul 2013 14:36:42 GMT", "server"=>"Apache/2.2.22 (Ubuntu)", "x-powered-by"=>"PHP/5.3.10-1ubuntu3.6", "location"=>"http://sushi.com/?f", "vary"=>"Accept-Encoding", "content-length"=>"20", "connection"=>"close", "content-type"=>"text/html", "set-cookie"=>"WEBUK=WUK08; path=/"}, :response=>#<Faraday::Response:0x007ff48f0422a8 ...>}, @on_complete_callbacks=[]>
我假设您的应用中有一些配置块,如下所示:
conn = Faraday.new(:url => 'http://sushi.com') do |faraday|
faraday.request :url_encoded
faraday.response :logger
faraday.adapter Faraday.default_adapter
end
conn.get '/nigiri/sake.json'
如果删除logger
行,则不应该向STDOUT输出任何内容。
答案 1 :(得分:4)
在测试(response :logger
)
!Rails.env.test?
配置即可
Faraday.new(url: endpoint) do |faraday|
faraday.request :url_encoded
faraday.response :logger if !Rails.env.test?
faraday.adapter Faraday.default_adapter
end
答案 2 :(得分:0)
有时无法修改Faraday实例配置,因为它是在gem中定义的。例如,“ oauth2” gem使用法拉第,并且在出错时输出将在.
序列中的测试输出期间进行控制台输出。
但是,标准法拉第配置使用标准库中的Logger
。
因此,另一种方法是模拟Logger实例方法add
,info
等使用的debug
方法:
allow_any_instance_of(Logger).to receive(:add)
我建议不要在全局范围内这样做,除非faraday.response :logger if !Rails.env.test?
是不可能的。因此,仅在生成有害输出的特定规范中。