2015-10-04 214 views
0

请帮忙解决问题。我使用gem'devise',gem'rspec'和本教程: Authentication with Devise in Rspec tests .i需要在控制台中输出@user。 emails_controller_spec.rb:如何在控制台输出@user?

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 

规格/工厂/ 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 

规格/支持/ 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 

我用户的宝石 '撬' 的看在运行测试后从控制台对变量进行操作。但我看到以下内容:

[email protected] ~/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代码。请帮忙

回答

0

我希望你已经把你的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