@murayamaの技術ブログ

ダミーrailsappをつくる

rails engineのテストをするにはダミーのrailsappが必要
任意のrailsプロジェクトで以下を実行して、生成されたspec/dummy_appを該当のengineにコピーする

 ./bin/rails plugin new dummy --mountable -T --dummy-path=spec/dummy_app  

dummy_app内のengine名の部分を書き換える

rspecをインストールする

gemspecのadd_development_dependencyに以下のgemを追加

  s.test_files = Dir["spec/**/*"]  

  s.add_development_dependency "rails", '~> 5.2'  
  s.add_development_dependency "rspec-rails"  
  s.add_development_dependency "factory_bot_rails"  
  s.add_development_dependency 'database_cleaner'  
  s.add_development_dependency 'spring-commands-rspec'  

インストール

$ ./bin/rails g rspec:install  

config/spring.rbを設置

Spring.application_root = './spec/dummy_app'  

rspecのbinstubを作成

$ bundle exec spring binstub rspec  

.rspecを編集

--format documentation  

を追記

.gitignoreを編集

spec/dummy_app/db/*.sqlite3  
spec/dummy_app/db/*.sqlite3-journal  
spec/dummy_app/log/*.log  
spec/dummy_app/tmp/  
spec/dummy_app/.sass-cache  

を追記

engine.rbを編集

      config.generators do |g|  
        g.test_framework :rspec,  
          fixtures: true,  
          view_specs: false,  
          helper_specs: false,  
          routing_specs: false,  
          controller_specs: true,  
          request_specs: false  
        g.fixture_replacement :factory_bot, dir: "spec/factories"  
      end  

spec/rails_helper.rbを編集

追記

require File.expand_path("../dummy_app/config/environment.rb", __FILE__)  
# require File.expand_path('../../config/environment', __FILE__)  

追記

require 'factory_bot_rails'  
require 'database_cleaner'  

削除

config.fixture_path = "#{::Rails.root}/spec/fixtures"  
Rspec.configure do |config|  
  # 追記  
  config.include FactoryBot::Syntax::Methods  

  config.before(:suite) do  
    DatabaseCleaner.strategy = :truncation  
  end  

  config.before(:each) do  
    DatabaseCleaner.start  
  end  

  config.after(:each) do  
    DatabaseCleaner.clean  
  end  
end  

Rakefileを編集

begin  
  require 'bundler/setup'  
rescue LoadError  
  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'  
end  

require 'rdoc/task'  

RDoc::Task.new(:rdoc) do |rdoc|  
  rdoc.rdoc_dir = 'rdoc'  
  rdoc.title    = 'EngineAppName'  
  rdoc.options << '--line-numbers'  
  rdoc.rdoc_files.include('README.md')  
  rdoc.rdoc_files.include('lib/**/*.rb')  
end  

APP_RAKEFILE = File.expand_path("spec/dummy_app/Rakefile", __dir__)  
load 'rails/tasks/engine.rake'  

load 'rails/tasks/statistics.rake'  

require 'bundler/gem_tasks'  

テスト用のDBの作成

$ RAILS_ENV=test ./bin/rails db:create  
$ RAILS_ENV=test ./bin/rails db:migrate  

このログへのコメント

コメントはありません