2012-02-21 67 views
5

作爲一種學習練習,我正在使用Sinatra,Datamapper和RSpec構建一個練習應用程序。我正在使用this template,這基本上是所有上述的樣板。從開發數據庫中分離Sinatra應用程序的測試數據庫?

我遇到的問題是RSpec和Datamapper似乎配置的方式,每次運行測試數據庫相關功能的規格時,這些測試直接更改我的開發數據庫而不是測試數據庫。

例如,我希望在運行規範的其餘部分之前創建一些數據庫對象...

before(:all) { 
    Region.new(:country => "Canada", :country_code => "CA").save 
    ProductLine.new(:reference => "Molders").save 
    Product.new(:name => "The Black Molder").save 
    Cart.new(:price => 25.95).save 
} 

但每次運行RSpec的時間,上述元素被添加到我的開發數據庫。

爲什麼不是生成測試數據庫呢?如何讓測試數據庫正常工作?

這看起來很像this issue here,除了Sinatra而不是Rails。

如果有任何幫助,我的代碼可以看到here

回答

16

在你需要my_app.rb文件,該文件又需要db.rb建立數據庫spec_helper.rb文件,但出現這種情況,你叫set :environment, :test之前,所以configure :test塊沒有運行(環境是默認在發展那個階段)。

當然,在您需要Sinatra之前,您不能撥打set environment :test,但您可以設置環境變量,Sinatra在設置其環境時會檢查這個變量。

因此,要確保你在測試環境中運行,(在你的測試啓動或別的地方,但你需要西納特拉之前)將其添加到的spec_helper.rb頂部:

ENV['RACK_ENV'] = 'test' 

你然後可以刪除set :environment, :test行,因爲它現在是多餘的。

這與您提到的其他問題類似,但機架應用使用RACK_ENV而不是RAILS_ENV

+0

嘿,這個伎倆!謝謝你的回答:) – 2012-03-19 07:27:21

+1

謝謝,我在各種地方放了'ENV ['RACK_ENV'] ='test'',並且爲什麼它沒有選擇它而感到沮喪 - 在閱讀你的答案之後,我把它放在**之前'spec_helper.rb' **的頂部'require'sinatra'',現在它可以工作! – Shevaun 2012-11-27 03:23:37

+0

非常感謝。這讓我瘋狂。 – 2014-07-17 14:46:15

相關問題