我正在尝试使用RSpec测试我的Rails应用程序,但是我的测试失败了,因为RSpec似乎没有传递我将它提供给Rails的头文件。
我有一个包含UsersController
的{{1}},在ApplicationHelper中我有一个访问ApplicationHelper
哈希的方法。通过我的headers
标头对其进行索引会返回SESSION_KEY
。如果我在该方法中nil
,则哈希不包含我提供的标头,只包含以下内容:puts headers
。
以下是我的RSpec规范的相关部分:
{"X-Frame-Options"=>"SAMEORIGIN", "X-XSS-Protection"=>"1; mode=block", "X-Content-Type-Options"=>"nosniff"}
我还尝试在没有HTTP_之前传递require 'rails_helper'
describe Api::V1::UsersController, type: :request do
let(:user) { User.create(name: 'TestUser', email: 'someone@example.com', password: 'password123', password_confirmation: 'password123') }
let(:id) { user.id }
let(:sess) { user.sessions.create }
before { get "/api/v1/users/#{id}" }
# Snipped other tests
context 'with authentication' do
context 'with a valid id' do
it 'returns full user information' do
get "/api/v1/users/#{id}", nil, {'HTTP_SESSION_KEY': sess.key}
response_user = response_json[:user]
expect(response.status).to eq 200
expect(response_user).to_not be_nil
expect(response_user[:name]).to eq user[:name]
expect(response_user[:email]).to eq user[:email]
end
end
end
def response_json
JSON.parse(response.body, symbolize_names: true)
end
end
标头,但这不起作用。我还尝试将其移至SESSION_KEY
块中的顶部get
以查看它是否是上下文问题,但这也不起作用。
答案 0 :(得分:1)
文档说上面的内容应该有效,但如果出于某种原因,rspec会将您的测试解释为:controller
测试而不是:request
测试,那么您需要这样做(就在{{1}之前调用):
get