37

Tôi bắt đầu chế tạo động cơ Rails 3.1 và tôi đang gặp khó khăn khi thử nghiệm nó bằng rspec.Thử nghiệm động cơ có thể lắp Rails 3.1 với Rspec

Trước hết, nếu tôi chạy rails g integration_test whatever nó tạo ra một thử nghiệm tích hợp thường xuyên trong các thử nghiệm/tích hợp thay vì spec/yêu cầu (các rspec-ray đá quý đã được cài đặt và bắt buộc như một sự phụ thuộc phát triển trong file gemspec)

Ngoài ra, khi tôi chạy một kiểm tra spec tôi nhận được một lỗi nói rằng bảng tương ứng với mô hình tôi đang thử nghiệm đã không được tạo ra. Tôi đã thử rake engine_name:install:migrations và chạy rake db:migrate từ bên trong ứng dụng giả và tôi gặp lỗi "bảng đã tồn tại".

Mọi thứ dường như bị ngắt kết nối, tôi cảm thấy tôi thiếu một số thứ ở đây để làm cho đá quý rspec hoạt động liền mạch như thường làm với các ứng dụng đường ray đầy đủ.

Tôi đã theo tất cả các thay đổi từ đây http://rubyx.com/2011/03/01/start-your-engines và tôi có thể kiểm tra động cơ theo cách thủ công bằng cách khởi chạy ứng dụng giả thông qua bảng điều khiển như được hiển thị ở đây http://railscasts.com/episodes/277-mountable-engines.

Có cách nào để biến rspec thành mặc định để thử nghiệm động cơ 3.1 thanh ray không?

+0

Trong đường ray 3.2 một số điều này đã được giải quyết, nhưng tôi luôn quên cách di chuyển cơ sở dữ liệu thử nghiệm. Để chạy di chuyển trên cơ sở dữ liệu thử nghiệm, hãy chạy 'rake app: db: test: prepare' trong thư mục gem của bạn. – Andrew

+0

Tôi vừa mới triển khai phương pháp trong bài viết này mà không gặp vấn đề gì. http://viget.com/extend/rails-engine-testing-with-rspec-capybara-and-factorygirl – jspooner

Trả lời

62

Tôi đang sử dụng RSpec với công cụ Rails không có sự cố.

Tôi đã tạo plugin của mình bằng các công tắc sau: -T - đầy đủ --dummy-path = spec/dummy.

  • -T không bao gồm test/unit
  • --full chỉ ra rằng các plugin là một công cụ
  • --dummy-path chỉ đơn giản là để chúng tôi không nhận được một thư mục kiểm tra (mặc định là test/dummy).

Từ đó tôi đã sử dụng spec_helper từ "bắt đầu động cơ của bạn" Bài chi tiết:

# Configure Rails Envinronment 
ENV["RAILS_ENV"] = "test" 
require File.expand_path("../dummy/config/environment.rb", __FILE__) 

require 'rspec/rails' 

ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../') 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f } 

RSpec.configure do |config| 
    config.use_transactional_fixtures = true 
end 

Đối với máy phát điện. Tôi thêm một config.generators chặn vào tập tin engine.rb của tôi như vậy:

module MyEngine 
    class Engine < Rails::Engine 
    config.generators do |g| 
     g.test_framework :rspec, :view_specs => false 
    end 
    end 
end 

Với điều đó, tôi có thể kiểm tra rspec khi chạy máy phát điện như máy phát điện mô hình.

Đối với DB, tệp database.yml của bạn có được thiết lập chính xác không? Bạn đã tải môi trường thử nghiệm chưa, ví dụ: rake db:test:clone hoặc rake db:migrate RAILS_ENV=test? Tôi đoán là RSpec không thể nhìn thấy bảng của bạn vì không có cơ sở dữ liệu thử nghiệm nào được thiết lập.

+1

tôi không nên sử dụng '--mountable' thay vì' --full'? – deb

+0

Tôi đã làm theo các thay đổi trong câu trả lời của bạn nhưng tôi vẫn không thể sử dụng trình tạo. nếu tôi thử 'rails g integration_test posts' thì không có gì xảy ra. Có lẽ bạn để lại một cái gì đó ra? – deb

+0

Tôi không sử dụng trình tạo tích hợp để tôi không chắc chắn. Chỉ cần đi qua - đầy đủ có nghĩa là nó là một công cụ tiêu chuẩn không phải là không gian tên và sẽ tạo ra dự án giả. Tôi khá chắc chắn bạn cần phải vượt qua - đầy đủ cho một --mountable là tốt để có được dự án giả để tạo ra, nhưng có lẽ thay đổi kể từ khi RC? Điều gì sẽ xảy ra nếu bạn thực hiện mô hình g ray ... hoặc bộ điều khiển? – dwhite

9

Tôi đang tìm câu trả lời tương tự và tôi đã tìm thấy the combustion gem * hứa hẹn thiết lập môi trường đầy đủ để chỉ định động cơ của bạn theo cách đơn giản hơn. Chỉ cần thêm

gem.add_development_dependency 'combustion', '~> 0.3.1' 

để gemspec của bạn và chạy

bundle exec combust 

để tái tạo một đường ray ứng dụng đầy đủ trong thư mục spec của bạn.

* Tôi chưa thử ...

+0

Cảm ơn bạn đã tham khảo - các loại đá đốt. –

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