2012-02-21 13 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のを実行するしかし、すべての時間は、上記の要素は、私の開発データベースに追加されます。

代わりにテストデータベースが生成されないのはなぜですか?テストデータベースを正しく動作させるにはどうすればよいですか?

これは、Railsの代わりにSinatraを除いて、this issue hereと非常によく似ています。

もし助けがあれば、私のコードはhereです。 spec_helper.rbファイルで

答えて

16

あなたが順番にあなたのデータベースを設定するdb.rbを必要my_app.rbファイルを必要としているが、あなたはset :environment, :testを呼び出すので、configure :testブロックが実行されていません(環境でデフォルトの開発である前にこの問題が発生しましたその段階)。

もちろん、Sinatraを必要とする前にset environment :testを呼び出すことはできませんが、Sinatraがその環境を設定するときに確認するRACK_ENV環境変数を設定することができます。だから、あなたは、テスト環境で実行していることを確認してくださいspec_helper.rbの先頭に以下を追加(あなたのテストの開始時または他のどこかが、あなたはシナトラを必要とする前に)する

ENV['RACK_ENV'] = 'test' 

あなたは今や冗長化されているので、set :environment, :test行を削除することができます。

これは他の質問と似ていますが、ラックアプリはの代わりにRAILS_ENVを使用しています。

+0

こんにちは、トリックをやった!お返事ありがとうございます:) –

+1

ありがとうございました。私はENV ['RACK_ENV'] = 'test''をさまざまな場所に置いていて、なぜそれが拾われなかったのか不満を感じていました。 'spec_helper.rb'の先頭**は'の前に '' sinatra''を必要とし、今は動作します! – Shevaun

+0

ありがとうございます。これは私を夢中にさせていた。 –

関連する問題