【问题标题】:Stubbing a controller method with Sinatra and rspec使用 Sinatra 和 rspec 对控制器方法进行存根
【发布时间】:2010-12-25 17:51:51
【问题描述】:

所以我试图找出一种在 rspec 中为 Sinatra 应用程序存根控制器方法的方法。这样做的主要原因是为了测试应用程序的逻辑流程,并确保它在满足某些条件时调用必要的函数。所以,本质上,我希望能够做类似的事情

controller.should_receive(:fancy_method).and_return("This is a string")

我遇到的困难是在 sinatra 应用程序中访问控制器实例。我可以使用 sinatra 控制器类上的 class_eval 覆盖当前函数,但我很想断言这些函数确实在运行。

有人有什么建议吗?

谢谢。

【问题讨论】:

    标签: ruby rspec sinatra


    【解决方案1】:

    Dan,我相信您真正想要的只是测试控制器操作。从测试人员的角度来看,您不应该真正关心它实际调用的内容,而应该关心输出,给定特定的输入和可能一些其他特殊条件(即模拟或存根其他类)(1) .

    您可以查看official documentation for Sinatra + Rack::Testthis blog post from devver.net

    (1) :如果您的控制器页面正在调用其他一些类(模型、服务等),您可以改为模拟这些类并对其寄予期望。例如:

    SomeClass.should_receive(:msg).with(:arg).and_return(:special_value)
    

    可以在RSpec documentation pages 上找到有关模拟的更多信息(在此示例中使用 RSpec)。

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多