我正在尝试使用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
endapp_spec.rb:
require File.dirname(__FILE__) + "/../spec_helper.rb"
describe 'Something' do
it "should do something" do
session["aa"] = "Test"
end
end--这会引发错误,找不到会话变量。类似地,我不能使用在我的app.中定义的助手方法。
我使用rspec specs/app_spec/app_spec.rb运行测试。
我做错了什么?
发布于 2011-09-14 11:21:34
假设您已经在/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",这个应用程序也有这个功能。如果你漏掉了西纳屈的碎片,那么也许吧,但我会通过机架添加这样的东西:
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 }https://stackoverflow.com/questions/7412870
复制相似问题