2013-04-08 31 views
0

我試圖從Sinatra 1.3.x升級到1.4.2。該規範運行良好,但黃瓜失敗:爲什麼Cucumber測試應用程序無法在1.4.x而不是1.3.x中訪問Sinatra的設置?

undefined local variable or method `settings' for #<RechargeWorld:0x007ffbd606ba60> (NameError) 

env.rb的相關部分看起來是這樣的:

class RechargeWorld 
    include Capybara::DSL 
    include RSpec::Expectations 
    include RSpec::Matchers 

    def db 
     @db ||= CouchRest.database(settings.db) 
    end 
    end 

一些這個代碼(注:我添加了db法)所產生的cucumber-sintra,它在1.3.x下運行正常,但在1.4.x版本中失敗。黃瓜-sinatra的最新版本基本上產生相同的env.rb

該應用程序是available on Github

1.3.x和1.4之間的設置哈希值是否會因此而發生任何變化?我做錯了嗎?

+0

Github似乎正在關閉,所以我不能自己嘗試這個,但是你有沒有試過調用Capybara使用的'app'變量,'Capybara.app.db'? – iain 2013-04-09 13:47:05

+0

不幸的是,這是行不通的。這會導致#(NoMethodError)':(但我會發佈一個可行的答案,隨時對其進行評論;-) – awendt 2013-04-10 19:45:39

回答

0

我看着official Cucumber+Sinatra guide,注意到app方法返回Sinatra::Application

所以我改變了env.rb到這部分:

class RechargeWorld 
    include Capybara::DSL 
    include RSpec::Expectations 
    include RSpec::Matchers 

    def db 
    @db ||= CouchRest.database(Sinatra::Application.settings.db) 
    end 
end 

,它就像一個魅力。

+0

非常高興它的工作。 'app'方法在那裏不起作用嗎? – iain 2013-04-10 19:54:33

+0

它呢!但我想,因爲我只需要這個訪問設置,我可以在這裏內聯。 – awendt 2013-04-10 19:56:31

相關問題