在规范内访问会话

Sta*_*ers 3 rspec ruby-on-rails

我在spec/helpers/session.rb中找到了这个简单的帮助器:

def sign_in user
    session[:remember_token] = user.remember_token
end
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在规范中使用它时出现错误.下列:

context 'when user is is signed in' do
    before do 
        sign_in user
        request 
    end

    specify{ expect(flash[:success]).to eq "Signed out successfully" }
end
Run Code Online (Sandbox Code Playgroud)

给我:

Failure/Error: sign_in user
NameError:
undefined local variable or method `session' for #<RSpec::ExampleGroups::AdminArea::Authentication::GuestVisitsRoot:0x00000004f835f0>
Run Code Online (Sandbox Code Playgroud)

那么如何从规范内部操纵会话呢?可能吗?

Par*_*war 6

我相信你在集成测试中看到了这个错误.集成测试不是为检查session相关事物而设计的.

你可以用这种方式实现同​​样的目的

def sign_in user
    # you can also use 
    # something like this 
    # post signin_path, :login => user.login, :password => 'password'
    # but i dont recommend this, since this is not how user do it.
    visit sign_in_path
    fill_in 'Email', with: user.email
    fill_in 'Password', with: user.password
    click_button 'Sign in'
end 
Run Code Online (Sandbox Code Playgroud)

然后在测试中,类似于

 expect(page).to have_content('My Account')
Run Code Online (Sandbox Code Playgroud)

有很多很棒的答案.看看,如果你有任何问题......包括它有问题我将尝试回答

  1. 会话在一些rspec文件中可用而不在其他文件中.怎么会?

  2. 在请求规范中对验证进行验证

  3. 使用RSpec集成测试和Capybara进行端到端测试