【问题标题】:Cucumber and capybara scenario session黄瓜和水豚情景会话
【发布时间】:2014-02-24 19:46:51
【问题描述】:

我做了很多研发,但对于简单的问题仍然没有答案 - 我的会话对象在哪里?

我有这样一个场景:

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 始终是新对象。 即使我在第一步中设置了 session[:test] = 1 ,在下一步中它也将是 nil 。

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

【问题讨论】:

    标签: ruby-on-rails session cucumber capybara


    【解决方案1】:

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

    但是我同意这不是 100% 的真实情况,特别是当您依赖某些第三方软件时,在这种情况下,我推荐 gem rack_session_access,它将允许您像这样访问您的会话:

    page.set_rack_session basket: Basket.new
    

    并通过page.get_rack_session_key('basket')访问它

    请记住,这是一个 hack,如果您的最终用户也不需要直接访问您的会话,则您不需要直接访问它。

    【讨论】:

    • 好的,那么使用 Cucumber 和 Capybara 测试结帐流程的正确方法是什么?我找不到它。
    • 你的断言应该基于最终用户会使用的东西。例如,您可以检查在结帐过程之后是否会显示成功消息,而不是检查会话。您可以通过思考以下问题来回答自己这样的问题:“我的最终用户如何知道他的结帐有效?”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多