首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Capybara中设置会话值?

如何在Capybara中设置会话值?
EN

Stack Overflow用户
提问于 2011-12-18 02:10:51
回答 5查看 18K关注 0票数 33

我正在为Shopify开发一个应用程序,我想做集成测试。

我需要能够在会话变量中存储一些值,以便身份验证有效。

我怎么能这么做呢?

我使用Capybara和Capybara-webkit。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-08 23:42:28

刚刚找到了rack_session_access的宝石,并且做了个魔法师。

票数 27
EN

Stack Overflow用户

发布于 2013-02-24 07:25:53

公认的答案是rack_session_access。它的工作方式是插入中间件控制器来编辑和更新会话状态,然后让水豚访问该页面并提交一个包含会话数据的表单。非常巧妙!但是,如果您使用的是Warden (直接或通过Devise),则不需要。

Warden有一个钩子on_next_request,它允许访问warden机制,该机制可用于直接设置会话密钥。我把这些放到了rspec中:

创建spec/support/inject_session.rb

代码语言:javascript
运行
复制
module InjectSession
  include Warden::Test::Helpers

  def inject_session(hash)
    Warden.on_next_request do |proxy|
      hash.each do |key, value|
        proxy.raw_session[key] = value
      end
    end
  end
end

spec/spec_helper.rb中,将模块包含在功能规格中:

代码语言:javascript
运行
复制
RSpec.configure do |config|
    config.include InjectSession, :type => :feature
end

那么等级库中的示例用法可能是:

代码语言:javascript
运行
复制
   inject_session :magic => 'pixie dust', :color => 'pink' 
   visit shopping_cart_path
   page.should be_all_sparkly_and_pink # or whatever
票数 31
EN

Stack Overflow用户

发布于 2011-12-18 03:42:17

正如apneadiving的评论所建议的那样,你应该“直接”使用水豚来填写表格。使用Cucumber进行测试可能如下所示,填写用于身份验证的登录表单(从Capybara github页面):

代码语言:javascript
运行
复制
When /I sign in/ do
  within("#session") do
    fill_in 'Login', :with => 'user@example.com'
    fill_in 'Password', :with => 'password'
  end
  click_link 'Sign in'
  ...
end

如果你尝试做一些不同的事情,或者在正常的登录过程中遇到问题,this SO问题可能会有所帮助。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8546839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档