RSPEC测试在渲染时失败

发布于 2025-01-26 17:23:22 字数 1926 浏览 6 评论 0原文

对于我的用户控制器,运行测试用例时,我将面临渲染问题。它正在重定向到 http://test.host/sign_in 而不是渲染新的。

  1. 控制器代码
         def create
        @user = User.new(user_params)
        respond_to do |format|
            if @user.save
                
                UserMailer.registration_confirmation(@user).deliver_now
                session[:user_id] = @user.id
                
                    format.html { redirect_to sign_in_path, notice: 'User was successfully created.' }
                    format.json { render :show, status: :created, location: @user }
                
            else
            
                format.html { render :new }
                format.json { render json: @user.errors, status: :unprocessable_entity }
            
            end
        end
    end
  1. SPEC/users_controller_spec.rb
         describe '#create' do
            it 'User created' do
              new_user = FactoryBot.build :user
              post :create, params: {
                user: {
                  id: new_user.id,
                  firstname: new_user.firstname,
                  email: new_user.email,
                  password: "s",
                  password_confirmation:"s"

                }
              }
              expect(response).to render_template("new")
             
            end
        end

在运行此测试案例时,我将面临此错误!

  1. 错误
        Failures:

  1) UsersController  controller test cases  #create User created
     Failure/Error: expect(response).to render_template("new")
       expecting <"new"> but was a redirect to <http://test.host/sign_in>
     # ./spec/controllers/users_controller_spec.rb:30:in `block (4 levels) in <top (required)>'

如何解决这个问题?

For my user controller, while running the test cases I am facing render issue. It is redirecting to http://test.host/sign_in instead of rendering new.

  1. Controller code
         def create
        @user = User.new(user_params)
        respond_to do |format|
            if @user.save
                
                UserMailer.registration_confirmation(@user).deliver_now
                session[:user_id] = @user.id
                
                    format.html { redirect_to sign_in_path, notice: 'User was successfully created.' }
                    format.json { render :show, status: :created, location: @user }
                
            else
            
                format.html { render :new }
                format.json { render json: @user.errors, status: :unprocessable_entity }
            
            end
        end
    end
  1. spec/users_controller_spec.rb
         describe '#create' do
            it 'User created' do
              new_user = FactoryBot.build :user
              post :create, params: {
                user: {
                  id: new_user.id,
                  firstname: new_user.firstname,
                  email: new_user.email,
                  password: "s",
                  password_confirmation:"s"

                }
              }
              expect(response).to render_template("new")
             
            end
        end

While running this test case I am facing this error!

  1. Error
        Failures:

  1) UsersController  controller test cases  #create User created
     Failure/Error: expect(response).to render_template("new")
       expecting <"new"> but was a redirect to <http://test.host/sign_in>
     # ./spec/controllers/users_controller_spec.rb:30:in `block (4 levels) in <top (required)>'

How do I resolve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

玉环 2025-02-02 17:23:22

根据您的控制器代码,当保存成功时,您将其重定向到sign_in:

format.html { redirect_to sign_in_path, notice: 'User was successfully created.' }

失败的测试说:

expecting <"new"> but was a redirect to <http://test.host/sign_in>

它来自期望(响应)。您可能需要将此行更改为期望(主题)。

行为render_template(“ new”)可能是相关的。

According to your controller code, you redirect to sign_in when the save is successful :

format.html { redirect_to sign_in_path, notice: 'User was successfully created.' }

Your failing test is saying :

expecting <"new"> but was a redirect to <http://test.host/sign_in>

It comes from expect(response).to render_template("new"). You might want to change this line to expect(subject).to redirect_to(sign_in_path).

The behaviour render_template("new") might be relevant when @user.save is false

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文