簡體   English   中英

如何在Sinatra應用程序中測試方法?

[英]How do I test methods in a Sinatra app?

如何訪問應用程序實例,以便可以測試foobar()方法?

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

  def foobar
    "hello world"
  end
end

測試什么都沒有關系-它是如何:) => http://www.sinatrarb.com/testing.html

這是一個較晚的答復,但我也在嘗試找到一種靈活的方法來做到這一點。

我在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! 不會產生通常Sinatra::Wrapper變成了切入點中間件管道和在正常設置的應用程序 那么new! 如果測試方法是真正的“助手”不依賴於中間件的功能(如SSL)的方式才有效。

另外, Rspec上帖子提出了一種替代解決方案。 我在過去使用類似的東西,但它需要更多的工作並不總是最好的選擇。 它具有提供更廣泛的測試代碼覆蓋范圍的優勢。 new!應用隔離new! 但是,如果我們要進行“單元”測試,這聽起來不錯。

注意@three的注釋:一個非平凡的應用程序應將API方法(通常在應用程序中)與所有幫助程序等分開。以單獨文件結尾的幫助程序更加簡潔,易於維護和測試。 但我絕對了解情況的應用程序的第一個版本將包括幾個助手,與重構將是必要的認識。 即使再有測試帶來了在軟件本身的一些更多的信心,並在未來重構為好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM