Sinatra + Rspec2 - использовать сессии / помощники? - PullRequest
1 голос
/ 14 сентября 2011

Я пытаюсь протестировать свое приложение Sinatra с помощью Rspec2, но не могу получить доступ к сеансам или вспомогательным методам в моих тестах.

spec_helper:

require File.dirname(__FILE__) + "/../myapp.rb"
require 'rubygems'
require 'sinatra'
require 'rack/test'
require 'rspec'
require 'factory_girl'

set :environment, :test

RSpec.configure do |conf|
  conf.include Rack::Test::Methods
end

def app
  Sinatra::Application
end

app_spec.rb:

require File.dirname(__FILE__) + "/../spec_helper.rb"

describe 'Something' do

  it "should do something" do
    session["aa"] = "Test" 
  end

end

В результате выдается ошибка, не удается найти переменные сеанса.Точно так же я не могу использовать вспомогательные методы, которые определены в моем приложении.

Я запускаю свои тесты, используя rspec specs/app_spec/app_spec.rb.

Что я делаю неправильно?

1 Ответ

1 голос
/ 14 сентября 2011

Если у вас есть свои спецификации и помощник по спецификациям в / spec dir, то эта строка должна идти вверху вашей спецификации:

require_relative "./spec_helper.rb"

Мне также нравится использовать File.expand_path и File.join, так как это более надежно, чем делать это самостоятельно, например,

require File.dirname(__FILE__) + "/../spec_helper.rb"

становится

require_relative File.expand_path( File.join File.dirname(__FILE__), "/../spec_helper.rb" )

Кроме того, я не склонен к require "sinatra", в приложении это есть. Если вам не хватает битов из sinatra, то, возможно, но я добавляю такие вещи вместо стойки:

ENV['RACK_ENV'] = 'test'

Наконец, если ваше приложение Sinatra использует модульный стиль, вам придется включить его тоже. Я делаю это в верхней части спецификации, например:

describe "The site" do
  include Rack::Test::Methods
  include MyApp
  let(:app) { MyApp.app  }

YMMV. Дайте нам знать, если что-то из этого работает.


Попробуйте другой тест:

before(:all) { get "/" }
subject { last_response }
it { should be_ok }
...