我发现其他人发布了许多类似的问题,但是没有一个解决方案起作用。
我的/spec/requests/questions_spec.rb是
require 'rails_helper'
RSpec.describe "Questions", type: :request do
describe "GET /questions" do
it "works! (now write some real specs)" do
get questions_path
expect(response).to have_http_status(200)
end
end
end
现在我的rspec错误
Questions GET /questions works! (now write some real specs)
Failure/Error: expect(response).to have_http_status(200)
expected the response to have status code 200 but it was 302
# ./spec/requests/questions_spec.rb:7:in `block (3 levels) in <top (required)>'
有人可以帮助我吗?如何自定义状态码200?
答案 0 :(得分:3)
302 - Found
。我认为您正在使用Rails脚手架。支架语法在get方法上返回302状态。如果需要200。您可以自定义代码。
答案 1 :(得分:2)
我认为您缺少身份验证。
使用login_user
答案 2 :(得分:1)
当我正确修改此代码时,我遇到了类似expected the response to have a success status code (2xx) but it was 302
的问题
描述“获取#index”的行为
it "returns http success" do
get :index
expect(response).to have_http_status(:success)
end
end
您知道我没有使用device
的原因,所以我不能使用他妈的login_user
,但是不幸的是,我已经完全忘记了如何实现登录实现。但是以某种方式使用session
保持登录状态。所以我就这样工作了。
描述“获取#index”的行为
it "returns http success" do
admin = User.create(name: "admin@gmail.com",
email: "admin@gmail.com",
password: "admin@gmail.com",
password_confirmation: "admin@gmail.com",
admin: true,
activated: true,
activated_at: Time.zone.now)
session[:user_id] = admin.id
get :index
expect(response).to have_http_status(:success)
end
end
答案 3 :(得分:0)
您很有可能会使用@Velusamy Venkatraman和@Raj提到的支架生成方法。因此,如果要获得2xx状态(这意味着完全成功),则需要sign_in
。 302状态表示页面已存在,但您已被重定向(主要是在发生某些错误的情况下)。
执行以下操作以解决该问题:
步骤1: 您可以在spec文件夹中创建如下所示的自定义方法,然后简单地使用它们:
module ControllerMacros
def login_admin
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:admin]
sign_in FactoryBot.create(:user, admin:true)
end
end
def login_user
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
sign_in FactoryBot.create(:user)
end
end
end
第2步:
在需要和更改的地方,将login_user
或login_admin
添加到规范文件中
let(:valid_session) { {} }
到
let(:valid_session) { {"warden.user.user.key" => session["warden.user.user.key"]} }
我希望您使用devise
和warden
,如果您不想担心会话/登录/注册问题,它们将非常有用。
您可以在此处查看其文档: plataformatec/devise wardencommunity/warden
此答案是根据devise的文档编写的: devise-wiki-how-to-test