2011-09-14 3 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

あなたのスペックおよび/仕様ディレクトリにおけるスペックヘルパーを持っていると仮定すると、このラインはあなたのスペックの一番上に行く必要があります。

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'とapp宣言をspecに移して、それが動作するかどうかを見てみましょう。あなたはセッションのもののために行くのではなく、動作することを確認するために、最初に別の種類のテストを試みるかもしれません。私の編集を参照してください。 – iain

+0

btw、Rack :: Testを使用して実現したばかりの(face palm!)は本当に統合テストのためのものなので、ヘルパーやセッションに直接アクセスすることはありません。テストヘルパーのこの記事を読むhttp://japhr.blogspot.com/2009/03/sinatra-innards-deletgator.html – iain

関連する問題