在我的Rails 3应用程序中,我有一个控制器,其中包含以下操作(代码简化):
def payment
redirect_to some_url_of_an_external_website
end
# the external website redirects the browser to this action when the payment is done
def payment_callback
@subscription = Subscription.new(:subscription_id => params[:subscription_id])
...
end
在我的验收测试中(使用steak和RSpec 2),当capybara跟随指向payment
操作的链接时,我想避免重定向到此外部URL。基本上我想模拟路由助手payment_path
,以便它直接指向具有相应subscription_id参数的payment_call_path
。
这是正确的方法吗?如果是这样,我怎么模拟payment_path(找不到怎么做)?
答案 0 :(得分:1)
虽然我通常会尝试避免在集成测试中进行模拟,但在这里您可以执行以下操作:
MyController.stub!(:payment).and_return('payment received').
如上所述使用class_eval
将导致该方法在整个运行过程中永久存根(如果您需要,我建议在spec_helper
中将其存根[假设您使用spec_helper] ])。无论如何,我发现使用rspec的模拟/存根材料是优选的。
答案 1 :(得分:0)
我不确定这是否是“正确”的方法,但您可以存储任何应用程序的代码以返回测试所需的内容。因此,在RSpec测试的某个地方,您可以执行类似
的操作MyController.class_eval do
def payment
'payment received'
end
end
Here is an example(请参阅“会话帮助方法”一节)#admin?当自定义RSpec帮助程序模块包含在示例组中时,ApplicationController中的方法是存根的。