如何访问应用实例,以便测试foobar()方法?
class App < Sinatra::Base
get '/' do
return foobar
end
def foobar
"hello world"
end
end
答案 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方法(通常在应用程序中)与所有帮助程序等分开。最终在单独文件中的帮助程序更清晰,更易于维护,更易于测试。但我绝对明白应用程序的第一个版本会包含一些帮助程序的情况,并意识到重构将是必要的。即便如此,进行测试也会对软件本身以及未来的重构带来更多信心。