【问题标题】:how @user output in console?@user 如何在控制台中输出?
【发布时间】:2023-03-23 09:04:01
【问题描述】:

请帮助解决问题。我使用 gem 'devise'、gem 'rspec' 和本教程: Authentication with Devise in Rspec tests .我需要控制台中的@user 输出。 emails_controller_spec.rb:

RSpec.describe EmailsController, type: :controller do
  let(:valid_attributes) {
    {
      email: Faker::Internet.email,
      description: Faker::Lorem.paragraph(7),
      user_id: 1
    }
  }

  describe "GET #index" do
    login_user

    it "assigns all emails as @emails" do
      email = Email.create! valid_attributes
      get :index
      binding.pry
      expect(assigns(:emails)).to eq([email])
      #expect(assigns(@user)).to eq(@user)
    end
  end
end

spec/factories/users.rb:

FactoryGirl.define do
  factory :user do
    sequence(:email){ |i| "us#{i}@ad.ad" }
    password 'qwertyui'
    password_confirmation{ |u| u.password } 
    role :none
  end 
end

spec/support/controller_macros.rb:

module ControllerMacros
  def login_user
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:user]
      user = FactoryGirl.create(:user)
      sign_in user
    end
  end
end

运行测试后,我使用 gem 'pry' 从控制台查看变量。但我看到了:

kalinin@kalinin ~/rails/mailer $ rspec spec/controllers

From: /home/kalinin/rails/mailer/spec/controllers/emails_controller_spec.rb @ line 56 :
[1] pry(#<RSpec::ExampleGroups::EmailsController::GETIndex>)> @user
=> nil
[2] pry(#<RSpec::ExampleGroups::EmailsController::GETIndex>)> user
NameError: undefined local variable or method `user' for #<RSpec::ExampleGroups::EmailsController::GETIndex:0x00000007c4e670>
from /home/kalinin/.rvm/gems/ruby-2.0.0-p598/gems/rspec-expectations-3.3.1/lib/rspec/matchers.rb:966:in `method_missing'
[3] pry(#<RSpec::ExampleGroups::EmailsController::GETIndex>)> puts page.html

=> nil

我需要显示用户对象或显示页面的 html 代码。请帮忙

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rspec devise


    【解决方案1】:

    我希望你在某处包含了你的ControllerMacros 模块。如果不将其添加到您的emails_controller_spec.rb 文件顶部,则为include ControllerMacros 在前块中添加login_user -

     describe "GET #index" do
        before { login_user }
    
        it "assigns all emails as @emails" do
          email = Email.create! valid_attributes
          get :index
          binding.pry
          expect(assigns(:emails)).to eq([email])
          expect(assigns(@user)).to eq(@user)
        end
      end
    

    还将您的 ControllerMacros 更改为:

    module ControllerMacros
      def login_user
        before(:each) do
          @request.env["devise.mapping"] = Devise.mappings[:user]
          @user = FactoryGirl.create(:user)
          sign_in @user
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多