Question

J'ai modularisé par application classique et sinatra déplacé mes itinéraires dans mon application sinatra dans des fichiers individuels itinéraires comme par https: // stackoverflow .com / a / 5030173/111884 , cependant, je ne peux pas sembler obtenir mes tests de travail.

Voici ce que mes fichiers ressemblent à:

./ web.rb

require 'sinatra'
require 'sinatra/flash'

class MyApp < Sinatra::Application
  # ...
end

require_relative 'models/init'
require_relative 'helpers/init'
require_relative 'routes/init'

./ routes / init.rb

require_relative 'main'

./ routes / main.rb

# The main routes for the core of the app
class MyApp < Sinatra::Application
  get '/' do
    erb :main
  end
end

./ spec / spec_helper.rb

ENV['RACK_ENV'] = 'test'
require 'minitest/autorun'
require 'rack/test'
require 'factory_girl'

# Include factories.rb file
begin
  require_relative '../test/factories.rb'
rescue NameError 
  require File.expand_path('../test/factories.rb', __FILE__)
end

# Include web.rb file
begin
  require_relative '../web'
rescue NameError 
  require File.expand_path('../web', __FILE__)
end

./ spec / web_spec.rb

begin 
  require_relative 'spec_helper'
rescue NameError
  require File.expand_path('spec_helper', __FILE__)
end

include Rack::Test::Methods

def app() Sinatra::Base end

describe "Some test" do
  # ...
end

Rakefile

# Test rake tasks
require 'rake/testtask'
Rake::TestTask.new do |t|
  t.libs << "test"
  t.libs << "spec"
  t.test_files = FileList['test/factories.rb', 'test/test_*.rb', 'spec/spec_helper.rb', 'spec/**/*_spec.rb']
  t.verbose = true
end

La sortie des tests est:

<h1>Not Found</h1>

Il ne semble pas charger les fichiers ./routes/*.rb.

J'utilise Sinatra::Application, au lieu de Sinatra::Base, mais https://stackoverflow.com/a/5030173/111884 utilise. Il a également des références ici http://www.sinatrarb.com/extensions.html . Je l'ai essayé de changer à utiliser Sinatra::Base, mais il n'a pas le réparer.

J'ai aussi essayé teste toujours Sinatra 404'ing et Using concombre avec Sinatra Apps modulaire , mais ils ne fonctionnent pas.

Était-ce utile?

La solution

Je pense que vous avez juste besoin de changer votre méthode de app pour retourner votre classe d'application modularisé (MyApp) plutôt que la classe Sinatra :: Base. Donc remplacer:

def app() Sinatra::Base end

web_spec.rb, avec:

def app
  MyApp
end

rack :: Test :: Méthodes dépend la méthode d'application pour lui dire quelle classe d'appeler à des demandes de traitement. Dans une application simple Sinatra non modulaire classe est Sinatra :: Base parce que c'est la classe où les routes sont appliquées par défaut. Dans une application modulaire qui est la classe dans laquelle vous définissez vos itinéraires (MyApp dans votre cas).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top