2011-12-17 96 views
20

我正在为Shopify开发一款应用程序,我想进行集成测试。如何在Capybara中设置会话值?

我需要能够在会话变量中存储一些值,以便验证正常工作。

我该怎么做?

我使用Capybara和Capybara-webkit。

+1

在集成测试,您应该记录从登录表单的用户。 – apneadiving 2011-12-17 18:49:33

+1

这不起作用。关键问题是我正在使用外部认证系统:Shopify。因此,Shopify被配置为将成功登录返回到特定的URL。看到问题了吗?该URL不能是本地主机。这就是为什么我需要伪造登录过程,即使我在集成测试 – Nerian 2011-12-17 20:53:10

回答

4

正如apneadiving建议的评论,你应该填写表格“直接”使用水豚。用黄瓜可能是这样在登录表单填写认证(从Capybara github上页)测试:

When /I sign in/ do 
    within("#session") do 
    fill_in 'Login', :with => '[email protected]' 
    fill_in 'Password', :with => 'password' 
    end 
    click_link 'Sign in' 
    ... 
end 

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

+0

这是行不通的。关键问题是我正在使用外部认证系统:Shopify。因此,Shopify被配置为将成功登录返回到特定的URL。看到问题了吗?该URL不能是本地主机。这就是为什么我需要伪造登录过程,即使我正在进行集成测试。 – Nerian 2011-12-17 20:52:59

+1

@Nerian查看是否可以使用https://github.com/myronmarston/vcr将该外部请求记录到本地环境,然后您可以使用此方法。 – 2011-12-22 07:50:04

4

我怕我带来坏消息,但是从水豚的文档:

访问会话和要求是不可能的从测试,获得 反应是有限的。

所以你将无法按照你的预期进行测试。


只是在想:这将是你在插入你的控制器一些条件语句测试目的:

session[:foo] = User.first.id if Rails.env.test? 

接受一个更好的选择将是猴子修补控制器只为您的集成测试。

+1

这是可能的,但感觉像是一种代码异味 - 将测试代码注入生产应用程序中?如果可以的话,最好重新编写测试。 – 2016-03-14 22:32:16

4

您可以使用类似VCR或webmock的东西将外部http资源的调用存根。

20

接受的答案建议rack_session_access。它通过插入中间件控制器来编辑和更新会话状态,然后使用capybara访问该页面并使用会话数据提交表单。很巧妙!但如果你正在使用Warden(直接或通过Devise),则不必要。

监督有一个挂钩on_next_request,可以访问监督机制,可以直接设置会话密钥。我把这个一起捆绑它在rspec的:

创建spec/support/inject_session.rb

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包括在功能规格模块:

RSpec.configure do |config| 
    config.include InjectSession, :type => :feature 
end 

然后在一个规范的样本用途是:

inject_session :magic => 'pixie dust', :color => 'pink' 
    visit shopping_cart_path 
    page.should be_all_sparkly_and_pink # or whatever 
+1

完美的作品,谢谢。不需要宝石! – Agent47DarkSoul 2013-11-13 14:21:10

+0

不适用于设计3 – 2014-07-28 07:06:44

+0

@YossiShasho以何种方式无效?它似乎对我很好,目前与设计3.2.4和监狱1.2.3 – ronen 2014-10-04 10:35:44