ruby – 从TestCase调用Sinatra app实例方法
我有一个util方法进入Sinatra应用程序,我想从我的TestCase测试.
问题是,我不知道如何调用它,如果我只是使用app.util_method我有错误NameError:undefined局部变量或方法’util_method’为#< Sinatra :: ExtendedRack:0x007fc0c43305b8> my_app.rb: class MyApp < Sinatra::Base # [...] routes methods # utils methods def util_method return "hi" end end my_app_test.rb: require "my_app.rb" require "test/unit" require "rack/test" class MyAppTest < Test::Unit::TestCase include Rack::Test::Methods def app MyApp.new end # [...] routes methods tests def test_util_method assert_equal( "hi",app.util_method ) end end 解决方法
Sinatra
aliases the
new method to new! 在重新定义之前,所以最简单的解决方案是使用它:
def app MyApp.new! end 当然,我只注意到,在我想出以下内容之后,我会留下来,因为它可能是有用的/翔实的. 一个可能的方法来让Sinatra redefining the def app a = MyApp.allocate a.send :initialize a end 这是一个黑客,但它可能是有用的测试. 另一种技术将是“走”中间件堆栈,直到你上课.以下是有点脆弱的,因为它取决于使用名称@app来引用堆栈中的下一个应用程序的所有中间件,但这是相当普遍的. def app a = MyApp.new while a.class != MyApp a = a.instance_variable_get(:@app) end a end 这不会在尚未发布的Sinatra 1.4(至少不在当前的主人,即commit 41840746e866e8e8e9a0eaafc53d8b9fe6615b12),因为新的现在返回 def app MyApp.new.instance_variable_get :@instance end (注意,最后的技术可能会在最终1.4版本之前更改). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |