我正在为Shopify开发一个应用程序,我想做集成测试。
我需要能够在会话变量中存储一些值,以便身份验证有效。
我怎么能这么做呢?
我使用Capybara和Capybara-webkit。
发布于 2012-11-08 23:42:28
刚刚找到了rack_session_access的宝石,并且做了个魔法师。
发布于 2013-02-24 07:25:53
公认的答案是rack_session_access。它的工作方式是插入中间件控制器来编辑和更新会话状态,然后让水豚访问该页面并提交一个包含会话数据的表单。非常巧妙!但是,如果您使用的是Warden (直接或通过Devise),则不需要。
Warden有一个钩子on_next_request,它允许访问warden机制,该机制可用于直接设置会话密钥。我把这些放到了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
发布于 2011-12-18 03:42:17
正如apneadiving的评论所建议的那样,你应该“直接”使用水豚来填写表格。使用Cucumber进行测试可能如下所示,填写用于身份验证的登录表单(从Capybara github页面):
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问题可能会有所帮助。
https://stackoverflow.com/questions/8546839
复制相似问题