2012-02-21 23 views
5

एक सीखने के अभ्यास के रूप में, मैं सिनात्रा, डाटामैपर और आरएसपीसी का उपयोग कर एक अभ्यास ऐप बना रहा हूं। मैं this template का उपयोग कर रहा हूं, जो मूल रूप से उपरोक्त सभी के लिए बॉयलरप्लेट है।विकास डेटाबेस से अलग सिनात्रा ऐप का परीक्षण डेटाबेस?

मेरी समस्या यह है कि जिस तरह से आरएसपीईसी और डाटामैपर कॉन्फ़िगर किया जाता है, हर बार एक स्पेस चलाया जाता है जो डेटाबेस से संबंधित कार्यक्षमता का परीक्षण करता है, वे परीक्षण सीधे परीक्षण डेटाबेस के बजाय मेरे विकास डेटाबेस को बदलते हैं।

उदाहरण के लिए, मैं कल्पना के बाकी को चलाने से पहले कुछ डेटाबेस वस्तुओं को बनाने के ...

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 के समान ही दिखाई देता है।

यदि यह कोई मदद है, तो मेरा कोड here देखा जा सकता है।

उत्तर

16

spec_helper.rb फ़ाइल आप my_app.rb फ़ाइल जो बदले में db.rb की आवश्यकता है अपने डेटाबेस स्थापित करने के लिए आवश्यकता होती है कर रहे हैं, लेकिन इस इससे पहले कि आप set :environment, :test फोन, इसलिए configure :test ब्लॉक रन नहीं किया जा रहा है क्या होता है (पर्यावरण पर डिफ़ॉल्ट विकास है वह मंच)।

बेशक आप सिनात्रा की आवश्यकता से पहले set environment :test पर कॉल नहीं कर सकते हैं, लेकिन आप RACK_ENV पर्यावरण चर सेट कर सकते हैं, जो सिनात्रा अपने पर्यावरण को सेट करते समय जांचता है।

ENV['RACK_ENV'] = 'test' 

आप:

तो सुनिश्चित करें कि आप परीक्षण वातावरण में चला रहे हैं बनाने के लिए, इस spec_helper.rb के शीर्ष करने के लिए (कहीं और भी परीक्षण के शुरू में या है, लेकिन इससे पहले कि आप सिनात्रा की आवश्यकता होती है) जोड़ने तो set :environment, :test लाइन को हटा सकता है क्योंकि यह अब अनावश्यक है।

यह आपके द्वारा संदर्भित अन्य प्रश्न के समान है, लेकिन रैक ऐप्स RAILS_ENV के बजाय RACK_ENV का उपयोग करते हैं।

+0

अरे जिसने चाल की है! आपके उत्तर के लिए धन्यवाद :) –

+1

धन्यवाद, मैं विभिन्न स्थानों पर 'ENV ['RACK_ENV'] = 'test''' डाल रहा था और निराश हो रहा था कि यह क्यों नहीं उठा रहा था - अपना उत्तर पढ़ने के बाद मैंने इसे रखा 'spec_helper.rb' ** के शीर्ष ** ** से पहले 'sinatra' की आवश्यकता है और अब यह काम करता है! – Shevaun

+0

बहुत बहुत धन्यवाद। यह मुझे पागल कर रहा था। –