Ian*_*ney 5 facebook rspec ruby-on-rails omniauth
我有一个使用devise/omniauth的rails 4应用程序允许通过facebook登录.该应用程序似乎工作,测试似乎也有效.但是,我有一个测试,用于检查用户通过Facebook登录的情况,但决定不授予权限.
此测试正常工作,但会向rspec输出发送错误消息
$ rspec -fd --tag inspect
Sign in with facebook
new user
E, [2013-10-20T21:25:24.232573 #17137] ERROR -- omniauth: (facebook) Authentication failure! invalid_credentials encountered
does not grant permission
Finished in 0.21152 seconds
1 example, 0 failures
Randomised with seed 52495
Run Code Online (Sandbox Code Playgroud)
要么
$ rspec
....E, [2013-10-20T21:25:24.232573 #17137] ERROR -- omniauth: (facebook) Authentication failure! invalid_credentials encountered.
............................................................
Finished in 0.95531 seconds
74 examples, 0 failures
Randomized with seed 2946
Run Code Online (Sandbox Code Playgroud)
相关测试
require 'spec_helper.rb'
feature "sign in with facebook" do
context "new user" do
scenario "does not grant permission", inspect: true do
dont_sign_in_with_facebook
expect(notice_area).to have_content "Could not authenticate you from Facebook because \"Invalid credentials\""
end
end
end
Run Code Online (Sandbox Code Playgroud)
和authentication_helper
module Features
module AuthenticationHelpers
def dont_sign_in_with_facebook
OmniAuth.config.test_mode = true
OmniAuth.config.mock_auth[:facebook] = :invalid_credentials
visit "/users/auth/facebook"
end
end
end
Run Code Online (Sandbox Code Playgroud)
我可以做些什么来抑制rspec输出的错误信息?
编辑
我尝试实现@Shepmaster描述的沉默功能,但没有解决问题.然后尝试重定向rspec命令中的错误:
rspec -fd --tag inspect 2> /dev/null
Sign in with facebook
new user
E, [2013-10-20T21:25:24.232573 #17137] ERROR -- omniauth: (facebook) Authentication failure! invalid_credentials encounterd
does not grant permission
Finished in 0.21152 seconds
1 example, 0 failures
Randomised with seed 65190
Run Code Online (Sandbox Code Playgroud)
并重定向stdout
rspec -fd --tag inspect > /dev/null
Run Code Online (Sandbox Code Playgroud)
没有输出!
最后使用输出选项
rspec -fd --tag inspect -o /tmp/rspec.out 2> /dev/null
cat /tmp/rspec.out
Sign in with facebook
new user
does not grant permission
Finished in 0.21152 seconds
1 example, 0 failures
Randomised with seed 65190
Run Code Online (Sandbox Code Playgroud)
答案 使用@shepmaster的答案
module Features
module AuthenticationHelpers
def dont_sign_in_with_facebook
OmniAuth.config.test_mode = true
OmniAuth.config.mock_auth[:facebook] = :invalid_credentials
silence_omniauth {visit "/users/auth/facebook"}
end
end
end
Run Code Online (Sandbox Code Playgroud)
Abe*_*ker 10
我在Rails 4.2应用程序中遇到了同样的问题.解决方法是根据README将OmniAuth记录器设置为初始化程序中的Rails记录器:
# config/initializers/omniauth.rb
OmniAuth.config.logger = Rails.logger
Run Code Online (Sandbox Code Playgroud)
最好的办法是找到打印该错误的代码,然后你就可以弄清楚是否存在一种消除该错误的精确方法.
该错误消息具有唯一的拼写错误(encountertererd),它在设计源中似乎没有发生(或曾经发生过).也许它来自你的代码或其他宝石?快速github搜索没有任何有用的结果.
添加
您似乎没有完全复制并粘贴错误,所以我一直在寻找一个永远不会发生的字符串!这是错误的来源.您应该能够在测试期间将OmniAuth记录器设置为其他记录器.这与silence下面的风格相同:
def silence_omniauth
previous_logger = OmniAuth.config.logger
OmniAuth.config.logger = Logger.new("/dev/null")
yield
ensure
OmniAuth.config.logger = previous_logger
end
Run Code Online (Sandbox Code Playgroud)
原版的
如果找不到消息的来源,则始终存在核选项:在该测试期间完全禁用打印到标准输出流.这个其他的SO问题有一个如何做的例子,我将在这里修改和复制:
def silence
previous_stdout, $stdout = $stdout, StringIO.new
previous_stderr, $stderr = $stderr, StringIO.new
yield
ensure
# Restore the previous values of stdout and stderr
$stdout = previous_stdout
$stderr = previous_stderr
end
# And in your test
it 'does whatever' do
silence { code.that_causes.the_warning }
end
Run Code Online (Sandbox Code Playgroud)
重申一下,找到一个更窄的解决方案要好得多.当测试期间打印出调试信息并且什么也看不见时,沉默stdout/stderr无疑会让人感到困惑.我这样说就是因为它发生在我上周这一次.:-)
| 归档时间: |
|
| 查看次数: |
1114 次 |
| 最近记录: |