التحويل إلى تطبيق سيناترا المعياري يكسر الاختبارات

StackOverflow https://stackoverflow.com/questions/8356750

  •  27-10-2019
  •  | 
  •  

سؤال

لقد قمت بتكوين وحدات بواسطة تطبيق سيناترا الكلاسيكي وقمت بنقل مساراتي في تطبيق سيناترا الخاص بي إلى ملفات مسارات فردية وفقًا https://stackoverflow.com/a/5030173/111884, ومع ذلك، يبدو أنني لا أستطيع إجراء اختباراتي.

هذا ما تبدو عليه ملفاتي:

./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

ملف الخليع

# 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

مخرجات الاختبارات هي:

<h1>Not Found</h1>

لا يبدو أنه يتم تحميل ./routes/*.rb ملفات.

أنا استخدم Sinatra::Application, ، بدلاً من Sinatra::Base, ، لكن https://stackoverflow.com/a/5030173/111884 يستخدمه.كما يشير إليه هنا http://www.sinatrarb.com/extensions.html.لقد حاولت تغييره للاستخدام Sinatra::Base, ، لكنه لم يحلها.

لقد حاولت أيضا سيناترا يختبر دائمًا 404'ing و استخدام الخيار مع تطبيقات سيناترا المعيارية, ، لكنهم لا يعملون.

هل كانت مفيدة؟

المحلول

أعتقد أنك تحتاج فقط إلى تغيير الخاص بك app طريقة لإرجاع فئة التطبيق النمطية (MyApp) بدلاً من فئة Sinatra::Base.لذا استبدل:

def app() Sinatra::Base end

في web_spec.rb، مع:

def app
  MyApp
end

رف::اختبار::طرق يعتمد على طريقة التطبيق لإخباره بالفصل الذي يجب الاتصال به لمعالجة الطلبات.في تطبيق سيناترا البسيط غير المعياري، تكون هذه الفئة هي Sinatra::Base لأن هذه هي الفئة التي يتم تطبيق المسارات فيها افتراضيًا.في التطبيق المعياري، هذه هي الفئة التي تحدد فيها مساراتك (MyApp في حالتك).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top