开发者

Setup Cucumber, Capybara and RSpec with Modular Sinatra application

开发者 https://www.devze.com 2023-03-06 09:09 出处:网络
Here\'s my config.ru $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), \'config\') require \'boot\'

Here's my config.ru

$:.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 }

And my lib contains the apps and the models.

How to let Cucumber to see my application:

here's cucumber env.rb

require 'capybara'
require 'capybara/cucumber'
require 'rspec'

World do
  Capybara.app = App
  include Capybara
  include RSpec::Expe开发者_StackOverflow中文版ctations
  include RSpec::Matchers
end

What I want is to let env.rb read my config.ru and get my cucumber ready for testing.


In @amrnt's solution you can replace that line

Capybara.app = eval("Rack::Builder.new {( " + File.read(File.dirname(__FILE__) + '/../../config.ru') + "\n )}")

with this:

Capybara.app, _ = Rack::Builder.parse_file(File.expand_path('../../config.ru', __FILE__))

or

Capybara.app = Rack::Builder.parse_file(File.expand_path('../../config.ru', __FILE__)).first    


set your env.rb:

ENV['RACK_ENV'] = 'test'
require File.join(File.dirname(__FILE__), '..', '..', 'config/boot.rb')

require 'capybara'
require 'capybara/cucumber'
require 'rspec'

Capybara.app = eval("Rack::Builder.new {( " + File.read(File.dirname(__FILE__) + '/../../config.ru') + "\n )}")

class SomeWorld
  include Capybara
  include RSpec::Expectations
  include RSpec::Matchers
end

World do
  SomeWorld.new
end

And It'll work!

0

精彩评论

暂无评论...
验证码 换一张
取 消