2012-02-21 36 views
5

Là một bài tập học tập, tôi đang xây dựng một ứng dụng thực hành sử dụng Sinatra, Datamapper và RSpec. Tôi đang sử dụng this template, cơ bản là bản mẫu cho tất cả những điều trên.Tách biệt cơ sở dữ liệu thử nghiệm của ứng dụng Sinatra từ cơ sở dữ liệu phát triển?

Vấn đề tôi đang gặp là cách RSpec và Datamapper dường như được định cấu hình, mỗi lần chạy thông số kiểm tra chức năng liên quan đến cơ sở dữ liệu, các kiểm tra này trực tiếp thay đổi cơ sở dữ liệu phát triển của tôi thay vì cơ sở dữ liệu thử nghiệm.

Ví dụ, tôi muốn tạo một vài đối tượng cơ sở dữ liệu trước khi chạy phần còn lại của spec ...

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 
} 

Tuy nhiên, mỗi khi tôi chạy RSpec, các yếu tố trên được thêm vào cơ sở dữ liệu phát triển của tôi.

Tại sao cơ sở dữ liệu thử nghiệm không được tạo? Tôi làm cách nào để cơ sở dữ liệu thử nghiệm hoạt động bình thường?

Điều này xuất hiện khá giống với this issue here, ngoại trừ Sinatra thay vì Rails.

Nếu có bất kỳ trợ giúp nào, mã của tôi có thể được xem here.

Trả lời

16

Trong spec_helper.rb tập tin bạn đang đòi hỏi my_app.rb tập tin do đó đòi hỏi db.rb để thiết lập cơ sở dữ liệu của bạn, nhưng điều này xảy ra trước khi bạn gọi set :environment, :test, vì vậy khối configure :test không được chạy (môi trường là sự phát triển mặc định tại giai đoạn đó).

Tất nhiên bạn không thể gọi set environment :test trước khi bạn yêu cầu Sinatra, nhưng bạn có thể đặt biến môi trường RACK_ENV, mà Sinatra kiểm tra khi thiết lập môi trường của nó.

Vì vậy, để đảm bảo bạn đang chạy trong môi trường thử nghiệm, thêm video này vào đầu spec_helper.rb (hoặc ở một nơi khác khi bắt đầu thử nghiệm của bạn, nhưng trước khi bạn yêu cầu Sinatra):

ENV['RACK_ENV'] = 'test' 

Bạn sau đó có thể xóa dòng set :environment, :test vì nó bây giờ không cần thiết.

Điều này tương tự như câu hỏi khác mà bạn tham chiếu, nhưng ứng dụng giá sử dụng RACK_ENV thay vì RAILS_ENV.

+0

Xin chào! Cảm ơn bạn đã trả lời :) –

+1

Cảm ơn, tôi đã đặt 'ENV ['RACK_ENV'] = 'test'' ở nhiều nơi khác nhau và cảm thấy thất vọng vì sao nó không được chọn - sau khi đọc câu trả lời của tôi đỉnh của 'spec_helper.rb' ** trước **' require 'sinatra'' và bây giờ nó hoạt động! – Shevaun

+0

Cảm ơn rất nhiều. Điều này khiến tôi phát điên. –

Các vấn đề liên quan