Aquí está mi config.ru
instalación de pepino, capibara y RSpec con modular aplicación Sinatra
$:.unshift File.join(File.expand_path(File.dirname(__FILE__)), 'config')
require 'boot'
Routes = Rack::Mount::RouteSet.new do |set|
set.add_route App::Users, { :path_info => %r{^/users*} }, {}, :users
set.add_route App::Dashboard, { :path_info => %r{^/$} }, {}, :dashboard
set.add_route Rack::File.new(File.dirname(__FILE__) + "/public"), { :path_info => %r{^/*} }, {}, :public
end
run Routes
boot.rb
require 'bundler'
Bundler.setup
Bundler.require(:default)
Mongoid.load!(File.join(File.dirname(__FILE__), '/mongoid.yml'))
%w(sinatra json yaml rack/mount rack/contrib).each {|l| require l }
Dir["./lib/**/*.rb"].each { |f| require f }
Y mi lib
contiene las aplicaciones y los modelos.
Cómo vamos a ver Pepino mi solicitud:
aquí está el pepino env.rb
require 'capybara'
require 'capybara/cucumber'
require 'rspec'
World do
Capybara.app = App
include Capybara
include RSpec::Expectations
include RSpec::Matchers
end
Lo que quiero es dejar que env.rb leer mi config.ru y conseguir mi pepino listo para la prueba.
'rack :: Builder.parse_file' - exactamente lo que estaba ¡buscando! – awendt
Gracias, eso hizo funcionar mis pruebas de Capybara después de refactorizar mi aplicación en controladores modulares. Pregunta: ¿Por qué 'Capybara.app, _ = Rack :: ....' funciona y 'Capybara.app = Rack :: ....' no funciona? ¿Qué hace el ', _'? – Andy
El tamaño de los comentarios está muy restringido ... por lo que tl; dr: en Ruby y en otros idiomas, la convención es usar '_' cuando se le devuelve algo que no necesita asignar. Por ejemplo: 'def foo; "bar", "baz"; fin'. Disculpas por no resaltar la sintaxis del bloque. Si no necesita "baz" asignado, use 'qux, _ = foo'. Si necesita ambos, haga 'qux, quz = foo' como siempre. Es lo mismo aquí. ['.parse_file' devuelve dos objetos] (https://github.com/rack/rack/blob/master/lib/rack/builder.rb#L45) por lo que si no necesita el segundo objeto, tendría que usa '_'. Esto también ocurre con bloque args mucho. – jamesconant