如何在Sinatra应用程序中测试方法?

时间:2012-09-27 13:30:40

标签: ruby sinatra

如何访问应用实例,以便测试foobar()方法?

class App < Sinatra::Base
  get '/' do
    return foobar
  end

  def foobar
    "hello world"
  end
end

2 个答案:

答案 0 :(得分:0)

你测试什么并不重要 - 它是如何:) =&gt; http://www.sinatrarb.com/testing.html

答案 1 :(得分:0)

这是一个迟到的回复,但我也想找到一种灵活的方法来做到这一点。

我在Sinatra的源代码(1.4.5)中发现,使用new!创建应用程序实例可以直接测试应用程序的方法。使用Test :: Unit和Shoulda进行测试设置。

class AppTest < Test::Unit::TestCase
  setup do
    @app = App.new! # here is the point.
  end

  should 'say hello to the world' do
    assert_equal "hello world", @app.foobar  # or @app.send(:foobar) for private methods.
  end
end

有后果。使用new!不会创建成为entry point to the middleware pipeline and the app in normal settings的常用Sinatra::Wrapper。因此new!方法只有在经过测试的方法确实是“助手”而不依赖于中间件功能(例如SSL)时才会起作用。

或者,post on Rspec提出了另一种解决方案。我过去使用了类似的东西,但它需要更多的工作并不总是最好的选择。它的优势在于可以提供更广泛的代码覆盖率来进行测试。如果我们正在进行“单元”测试,那么使用new!隔离应用程序听起来不错。

关于@ three评论的注意事项:一个非平凡的应用程序应该将API方法(通常在应用程序中)与所有帮助程序等分开。最终在单独文件中的帮助程序更清晰,更易于维护,更易于测试。但我绝对明白应用程序的第一个版本会包含一些帮助程序的情况,并意识到重构将是必要的。即便如此,进行测试也会对软件本身以及未来的重构带来更多信心。