黄瓜和水豚情景会议

时间:2014-01-31 22:51:35

标签: ruby-on-rails session cucumber capybara

我做了很多R& D但仍然没有回答简单的问题 - 我的会话对象在哪里?

我有这样的场景:

Scenario: I should be able to add products to the basket
  Given I have a product named "Mousepad" # creates object using FactoryGirl
  When I add "Mousepad" to basket         # sends POST request to add product 
  Then I should have 1 item in my basket  # visit basket page

这是篮子方法:

def set_current_basket
  @basket = (session[:basket] ||= Basket.new)
end 

它在浏览器中工作正常,但在测试中没有。 @basket allways是新对象。 即使我在第一步中设置session [:test] = 1,在下一步中它也将为nil。

我错过了什么,怎么可能?

1 个答案:

答案 0 :(得分:3)

Capybara背后的想法是,您将模拟用户行为,因此您不需要直接会话访问。

但是我同意100%的时间都不是这样,特别是当你依赖某些第三方软件时,在这种情况下我推荐使用gem rack_session_access,这样你就可以访问你的会话了:

page.set_rack_session basket: Basket.new

并通过page.get_rack_session_key('basket')

访问它

请注意,这是一个黑客攻击,如果最终用户不需要,您也不需要直接访问会话。

相关问题