我正试图在我的黄瓜测试中模拟OpenID处理。为此,我使用以下方法:
def set_result_of_openid_authentication(result_type, profile_data = nil)
ActionController::Base.class_eval "
def begin_open_id_authentication(identity_url, options = {})
yield [OpenIdAuthentication::Result.new('#{result_type}'.to_sym), identity_url, #{profile_data}]
end
"
end
# example usage
set_result_of_openid_authentication :successful, 'email' => 'dhofstet@example.com'
这适用于Ruby 1.9.2,但是使用Ruby 1.8.7我得到以下编译错误:
(eval):5:in `set_result_of_openid_authentication': compile error
(eval):3: syntax error, unexpected tIVAR, expecting kDO or '{' or '('
...identity_url, emaildhofstet@example.com]
由于某些原因,哈希值未被保留...是否有一些解决方法可以使它与两个Rubies一起使用?
感谢。
答案 0 :(得分:1)
问题是,class_eval
内插字符串#{profile_data}
内部的emaildhofstet@example.com
是to_s
Hash
代表#{profile_data.inspect}
在1.8.7。
如果您将其替换为{'email' => 'dhofstet@example.com'}
,则应根据需要将其替换为{{1}}。