我是Ruby(Rails)的新手,但是遵循RailsCast教程(#68)可以将OpenID登录添加到应用程序中。 现在我想创建一个测试( Test :: Unit ),我读了一些关于模拟和存根的测试,但我不确定我该怎么做。
这是会话控制器的外观:
def create
if using_open_id?
open_id_authentication(params[:openid_url])
...
end
end
protected
def open_id_authentication(openid_url)
authenticate_with_open_id(...) do |result, identity_url, registration|
if result.successful?
...
end
end
end
我创建了一个简单的测试,但无法测试'authenticate_with_open_id'中的块。
感谢任何帮助
答案 0 :(得分:0)
在控制器测试中,您可以覆盖控制器上的一个方法,如下所示:
def @controller.some_method
..
end
因此您可以使用此技术删除authenticate_with_open_id
方法。
现在假设您要为场景编写一个测试“为使用无法识别的身份URL成功打开ID登录创建新用户”我们需要使用一种方法来生成authenticate_with_open_id
块的参数。 e.g。
class SuccessfulResult
def successful?
true
end
end
def @controller.authenticate_with_open_id(url, options)
yield SuccessfulResult.new, "NEW_IDENTITY", {'nickname' => 'testuser', 'email' => 'testuser@example.org' }
end
您还需要using_open_id?
才能返回true
,您可以通过存根或在请求中传递所需参数来执行此操作。
然后,您可以断言已经以通常的方式将额外的用户添加到数据库中。
答案 1 :(得分:0)
@mikej描述的技巧对我有用,如果你将它包装在setup
块中进行测试,就像这样
require 'test_helper'
class PostsControllerTest < ActionController::TestCase
#wrap in a setup block
setup do
def @controller.current_user
User.first
end
end