2011-09-14 4 views
1

Rspec2를 사용하여 Sinatra 앱을 테스트하려고하는데 테스트에서 세션이나 도우미 메소드에 액세스 할 수 없습니다.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

당신이 당신의 사양과/사양 DIR의 사양 도우미를 가지고 가정하면,이 줄은 사양의 상단에 가야한다 :

require_relative "./spec_helper.rb" 

나는 또한 File.expand_path 및 파일을 사용하는 것을 좋아합니다. 자신보다 더 믿을만한 사람으로 참여하십시오.

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

앱이 그것을 가지고, 내가 require "sinatra"하는 경향이하지 않는, 또한

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

된다. 당신은 어쩌면시나에서 비트를 놓치고있어,하지만 난 대신 랙을 통해이 같은 일을 추가 할 경우 :시나의 앱이 모듈 식 스타일을 사용하는 경우

ENV['RACK_ENV'] = 'test' 

마지막으로, 당신은 너무 그것을 포함해야합니다. 예를 들면 다음과 같이 사양 상단에서이 작업을 수행합니다.

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 } 
+0

감사합니다. spec_helper.rb 파일이 올바르게 포함되어 있습니다 (정의 된 다른 항목에 액세스 할 수 있습니다). 문제는 아닙니다. 나는 모듈 스타일을 사용하지 않는다. 다른 아이디어? – Pogopuschel

+0

'include Rack :: Test :: Methods' 및 앱 선언을 스펙으로 옮겨보고 작동하는지 확인하려고합니다. 먼저 다른 종류의 테스트를 시도해 볼 수도 있습니다. 세션에 들어가기보다는 작동하는지 확인하고, 제 편집을보십시오. – iain

+0

btw, Rack :: Test를 사용하여 구현 한 것 (얼굴 손바닥 만!)은 실제로 통합 테스트 용이므로 헬퍼 또는 세션에 직접 액세스하지 않습니다. 테스트 도우미에 대한이 게시물 읽기 http://japhr.blogspot.com/2009/03/sinatra-innards-deletgator.html – iain