首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >辛纳屈+ Rspec2 -使用会话/帮助?

辛纳屈+ Rspec2 -使用会话/帮助?
EN

Stack Overflow用户
提问于 2011-09-14 07:44:06
回答 1查看 766关注 0票数 1

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

spec_helper:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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运行测试。

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2011-09-14 11:21:34

假设您已经在/spec dir中获得了您的规范和规范助手,那么这一行应该位于您的规范的顶部:

代码语言:javascript
复制
require_relative "./spec_helper.rb"

我也喜欢使用File.expand_path和File.join,因为它比自己做更可靠。

代码语言:javascript
复制
require File.dirname(__FILE__) + "/../spec_helper.rb"

变成了

代码语言:javascript
复制
require_relative File.expand_path( File.join File.dirname(__FILE__), "/../spec_helper.rb" )

而且,我不喜欢require "sinatra",这个应用程序也有这个功能。如果你漏掉了西纳屈的碎片,那么也许吧,但我会通过机架添加这样的东西:

代码语言:javascript
复制
ENV['RACK_ENV'] = 'test'

最后,如果您的Sinatra应用程序使用模块化风格,那么您也必须包括它。例如,我是在规范的顶端这样做的:

代码语言:javascript
复制
describe "The site" do
  include Rack::Test::Methods
  include MyApp
  let(:app) { MyApp.app  }

YMMV让我们知道这其中的任何一个是否有效。

一种不同的尝试:

代码语言:javascript
复制
before(:all) { get "/" }
subject { last_response }
it { should be_ok }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7412870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档