2009-04-06 30 views
10

Tôi đang tạo một số đá quý có thể được sử dụng trong bộ điều khiển Rails và chế độ xem. Tôi muốn có thể kiểm tra đá quý một cách độc lập. Nhưng tôi đã không thể tìm ra cách để tạo ra một thể hiện của Rails bên trong đá quý để kiểm tra xem đá quý có hoạt động bên trong ứng dụng Rails hay không.Kiểm tra Ruby Gems dưới Rails

Tôi đặc biệt thích sử dụng RSpec, nhưng có thể thích nghi với giải pháp Test :: Unit hoặc chỉ sử dụng Test :: Unit.

Tôi cũng sẽ quan tâm đến các giải pháp tương tự cho plugin Rails.

(Tôi đã thử dùng Googling, nhưng "kiểm tra đá quý đường ray" cho tôi xem đá quý được sử dụng để thử nghiệm, không phải cách thử nghiệm đá quý. Tôi chắc chắn mình đã xem một bài viết hoặc 2 về chủ đề này.)

Trả lời

12

Hãy xem các plugin khác (plugin và đá quý, cùng một điều) bộ thử nghiệm.

Trình kiểm tra bổ sung giúp tăng cường Bản ghi đang hoạt động khá dễ dàng. Bạn có thể use Active Record anywhere, vì vậy tất cả những gì bạn phải làm trong trường hợp đó là kết nối Active Record với cơ sở dữ liệu (ví dụ: cơ sở dữ liệu sqlite trong bộ nhớ) và kiểm tra mã của bạn.

# test/test_helper.rb 
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib') 
require 'your_thing' 

ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:") 

ActiveRecord::Schema.define(:version => 1) do 
    create_table :posts do |t| 
    t.string :title 
    t.text :excerpt, :body 
    end 
end 

class Post < ActiveRecord::Base 
    validates_presence_of :title 
end 

# test/my_test.rb 
require 'test_helper' 

class MyTest < Test::Unit::TestCase 
    def test_thing 
    # use Post here 
    end 
end 

Sẽ khó khăn hơn khi bạn muốn kiểm tra các hành động của trình điều khiển và như vậy. My live validations plugin có một bộ thử nghiệm khá rộng rãi, có thể loại bỏ nhiều thứ và cho phép tôi vượt qua các chế độ xem ERb dưới dạng chuỗi, bạn có thể xem xét điều đó.

Điều chỉnh các thử nghiệm này :: Ví dụ đơn vị cho RSpec không đáng kể, vì chúng không có tính năng piggyback trên bất kỳ thứ gì trong Bài kiểm tra :: Đơn vị.

+0

Điều này rất hữu ích; cảm ơn! Có cách nào để giữ ActiveRecord nạp (ala spec_server hoặc spork) để tải ActiveRecord và tạo cơ sở dữ liệu mỗi lần không làm chậm quá trình kiểm tra của tôi xuống quá nhiều? – Chinasaur

+0

Tôi chắc chắn có một cách để làm điều đó. Nếu bạn sử dụng lưu trữ tệp sqlite3, thay vì bộ nhớ lưu trữ như plugin xác thực trực tiếp của tôi sử dụng, bạn có thể kiểm tra xem tệp cơ sở dữ liệu .sqlite3 có tồn tại hay không và không chạy các di chuyển nếu nó hoạt động ... –

+0

Ghi chú: 1) Tôi phải thêm khung kiểm thử (rspec) và sqlite3 làm phụ thuộc phát triển trong gemspec của mình (và tất nhiên là phụ thuộc thời gian chạy), 2) Cần có 'rails' & 'active_record' trong trình trợ giúp kiểm tra của tôi tốt –

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