2015-11-17 10 views
10

Piszę klejnot, który integruje się z szynami, i chcę być w stanie przetestować fałszywą aplikację z rspec wewnątrz zestawu testowego mojego klejnotu.Jak testujesz aplikację dummy rails podczas pisania gem?

Problem pojawia się, kiedy sprawdzić, czy ładunki moje szyny atrapa aplikacji/a moduły para przez rspec spec/integration/rails/load_path_spec.rb

do tej pory, to jest to, co mam:

# spec/support/rails_app/config/environment.rb 

# Load the Rails application. 
require File.expand_path('../application', __FILE__) 

# Load the gem 
require 'skinny_controllers' 

# Initialize the Rails application. 
Rails.application.initialize! 

Me Test wygląda następująco:

require 'rails_helper' 

describe 'definitions of operations and policies' do 
    it 'loads operations' do 
    is_defined = defined? EventOperations 
    expect(is_defined).to be_truthy 
    end 

    it 'loads policies' do 
    is_defined = defined? EventPolicy 
    expect(is_defined).to be_truthy 
    end 
end 

rails_helper wygląda następująco:

require 'rails/all' 

require 'factory_girl' 
require 'factory_girl_rails' 
require 'rspec/rails' 

require 'support/rails_app/config/environment' 

ActiveRecord::Migration.maintain_test_schema! 

# set up db 
# be sure to update the schema if required by doing 
# - cd spec/rails_app 
# - rake db:migrate 
ActiveRecord::Schema.verbose = false 
load "support/rails_app/db/schema.rb" # use db agnostic schema by default 


require 'support/rails_app/factory_girl' 
# require 'support/rails_app/factories' 
require 'spec_helper' 

I spec_helper wygląda następująco:

require 'rubygems' 
require 'bundler/setup' 

require 'pry-byebug' # binding.pry to debug! 
require 'awesome_print' 

# Coverage 
ENV['CODECLIMATE_REPO_TOKEN'] = '' 
require 'codeclimate-test-reporter' 
CodeClimate::TestReporter.start if ENV['TRAVIS'] 


# This Gem 
require 'skinny_controllers' 

$LOAD_PATH.unshift Dir[File.dirname(__FILE__) + '/support/operations'].first 
$LOAD_PATH.unshift Dir[File.dirname(__FILE__) + '/support/policies'].first 
Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each do |file| 
    # skip the dummy app 
    next if file.include?('support/rails_app') 

    require file 
end 

# This file was generated by the `rspec --init` command. Conventionally, all 
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. 
# Require this file using `require "spec_helper"` to ensure that it is only 
# loaded once. 
# 
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration 
RSpec.configure do |config| 
    config.run_all_when_everything_filtered = true 
    config.filter_run :focus 
    # Run specs in random order to surface order dependencies. If you find an 
    # order dependency and want to debug it, you can fix the order by providing 
    # the seed, which is printed after each run. 
    #  --seed 1234 
    config.order = 'random' 
end 

wydaje się, połowę czasu, kiedy biegnę rspec, wszystkie testy przechodzą.

Jeśli ktoś jest ciekawy, mój repozytorium jest tutaj: https://github.com/NullVoxPopuli/skinny_controllers

Odpowiedz

10

Oto jak skończyło się na testowanie aplikacji szyn here is the gem where I have a dummy rails app

W cokolwiek plików Spec chcesz przetestować swoją aplikację szyn, będziesz chce zażądać nowego pliku, który nazwałem rails_helper.rb

require 'rails/all' 

require 'factory_girl' 
require 'factory_girl_rails' 
require 'rspec/rails' 

require 'support/rails_app/config/environment' 

ActiveRecord::Migration.maintain_test_schema! 

# set up db 
# be sure to update the schema if required by doing 
# - cd spec/support/rails_app 
# - rake db:migrate 
ActiveRecord::Schema.verbose = false 
load 'support/rails_app/db/schema.rb' # db agnostic 

require 'support/rails_app/factory_girl' 
require 'spec_helper' 

a następnie w folderze spec/support, wygenerować szyn app tam. Kopalnia znajduje się w: 'spec/support/rails_app'. W tym miejscu aplikacja rails może być bardzo odchudzona w porównaniu do tego, co generuje domyślne rusztowanie.

I musiał dokonać zmian do aplikacji, w config/environment.rb

# Load the Rails application. 
require File.expand_path('../application', __FILE__) 

# gem should be required here 
require 'skinny_controllers' 

# Initialize the Rails application. 
Rails.application.initialize! 

A dla database.yml,

default: &default 
    adapter: sqlite3 
    pool: 5 
    timeout: 5000 

development: 
    <<: *default 
    database: db/development.sqlite3 

test: 
    <<: *default 
    database: db/test.sqlite3 

Ustawienie db prawdopodobnie mogłyby zostać zmienione w użyciu w pamięci sqlite, jeśli taki pożądany.

Mam nadzieję, że to wszystko. Jeśli coś przeoczyłem, zaktualizuję tę odpowiedź.