Devise Gem'e bağlı bir Rails motoru geliştiriyorum. Motorumun kendisi de bir mücevher ve bu şey için testler yazmam gerekiyor. Bunun için ben bir mücevher içeriden bir motoru test etmek nasıl okumaları çok yaptım ve ben şu kurulum için geldi: i Devise mücevher dahil ÖnceDevils ve rspec ile Rails3 Motorunu test etme
my_engine
+- app # my engine stuff
+- config # my engine stuff
+- Gemfile
+- lib # my engine stuff
+- publiC# my engine stuff
+- spec
+- controllers # controller tests
+- models # model tests
+- dummy # a dummy application that is using the 'my_engine/Gemfile'
+- spec_helper.rb # the spec helper that boots the dummy app
i testleri yazmak ve
onları çalıştırabilirrake spec
Şimdi ben devise mücevher ve bu
class Manager::User < ActiveRecord::Base
devise :database_authenticatable, :registerable, # ...
end
gibi bir kullanıcı modeli ve benim testler kullanıcı sınıfı ve vasiyetle çağrısına işaret başarısız.
`method_missing': undefined method `devise'
Şimdi ben hatayı araştırmak ve birlikte vasiyetle ve benim motoru ile kukla uygulamayı nasıl açılacağına bulmaya çalış. Spec yardımcı evnironment.rb
# my_engine/spec/dummy/config/environment.rb
# Load the rails application
require File.expand_path('../application', __FILE__)
# Initialize the rails application
Dummy::Application.initialize!
bu
# my_engine/spec/spec_helper.rb#
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../dummy/config/environment.rb", __FILE__) # boots the dummy app and fails
# more rspec stuff gies here
gibi application.rb
# my_engine/spec/dummy/config/application.rb
require File.expand_path('../boot', __FILE__)
require 'rails/all'
Bundler.require(:default, Rails.env) if defined?(Bundler)
# Dummy::Application definition follows here (the common stuff)
boot.rb
# my_engine/spec/dummy/config/boot.rb
require 'rubygems'
# Loads the gemfile from 'my_engine/Gemfile'
gemfile = File.expand_path('../../../../Gemfile', __FILE__)
begin
ENV['BUNDLE_GEMFILE'] = gemfile
require 'bundler'
Bundler.setup
rescue Bundler::GemNotFound => e
STDERR.puts e.message
STDERR.puts "Try running `bundle install`."
exit!
end if File.exist?(gemfile)
gemfile görünüyor
# my_engine/Gemfile
source :gemcutter
gem 'rails', '3.0.3'
gem 'rake'
gem 'devise', '>=1.2.rc'
gem 'declarative_authorization', '0.5.2'
group :test do
gem "cucumber"
gem "cucumber-rails"
gem "database_cleaner"
gem "capybara", ">= 0.4.0"
gem "capybara-envjs"
gem "culerity"
gem "webrat"
gem "rspec-rails", ">= 2.4.0"
gem "jeweler"
end
Ben Gemfile ve taşlar tam olarak yüklendiği bu
gem "my_engine", :path => "./"
gibi benim motoru gerektirecek da çalıştı (Bundler.setup geçiyor ve sürekli kullanılabilir Vasiyetle).
Şimdi, my_engine gem kullanan harici bir uygulama oluşturdum. Testleri motorumdan kopyalayıp çalıştırdığımda, hepsi geçiyor.
Eksik olduğum bir şey var mı? Belki bir motor için test yapmak için daha iyi bir yol var mı?
İyi :) Mücevherlerim için bir rehber olarak kullanacağım :) – m4risU
Ben gemfile = File.expand_path ('yorumlayarak, motorun gemspecinden ayrı olan uygulamanın kendisi için bir Gemfile ayarlama yaklaşımı alıyorum ../../../../Gemfile ', __FILE __) 've dinlenme ve yeni oluşturulan bir uygulamanın tipik içeriği ile yerine koyma. –