我经历了一段时间,控制器规格忽略了请求修改。
为了找到错误,spec_helper被压缩为
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require "webmock/rspec"
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
RSpec.configure do |config|
config.mock_with :rspec
config.infer_base_class_for_anonymous_controllers = false
end
控制器规范本身看起来像这样(忽略其他上下文)
require 'spec_helper'
require 'rest-client'
describe SessionsController, :type => :controller do
describe '#create' do
it 'should [something]' do
session[:return_point] = root_path
post :create, {:sessions => {:email => 'foo@bar.com', :password => :123}}
end
end
end
并且sessions_controller被压缩为
class SessionsController < GuestBaseController
def create
raise session.inspect
end
end
规范中这一加注的结果是{}
,这显然是错误的,因为我只是在会话中添加了一些内容。
问题部分: 我是否未能设置一些配置变量来执行会话魔术/模拟和存根魔法?
request.cookies
和response.cookies
存在同样的问题。
我可以设置它们,但它们会被忽略。
任何帮助都会得到满足。
答案 0 :(得分:0)
在控制器规范中,您可以修改属于request
对象的会话,也可以将其作为第二个哈希传递给请求消息:
request.session[:return_point] = root_path
get :index, {}, { another_session: 'is merged with the request session' }