Sinatra + Rspec2 - 使用会话/助手?

时间:2011-09-14 07:44:06

标签: ruby rspec sinatra rspec2

我正在尝试使用Rspec2测试我的Sinatra应用程序,但我无法在我的测试中访问会话或辅助方法。

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 个答案:

答案 0 :(得分:1)

假设你在/ spec目录中有你的规格和规范助手,那么这一行应该放在规范的顶部:

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 }