我正在尝试使用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
运行测试。
我做错了什么?
答案 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 }