【问题标题】:Changing the value of a session variable in specs while testing in Ruby on rails.(with capybara and selenium)在 Ruby on rails 中进行测试时更改规范中会话变量的值。(使用 capybara 和 selenium)
【发布时间】:2011-09-26 17:13:03
【问题描述】:

我目前正在为我的 Ruby on Rails 应用程序编写规范,使用 Rspec 和 capybara 以及 selenium 来驱动浏览器。

在执行规范之一时,我想更改会话变量的值。 例如:我想设置session[:location]="US",这样我就可以测试我的应用程序,而所有值都以$ 显示。我该怎么办?

【问题讨论】:

    标签: ruby-on-rails session selenium rspec capybara


    【解决方案1】:

    Capybara/Selenium 规格用于验收测试。您不应该直接进行任何类型的模拟、存根或...更改会话值。您应该在规范中与您的应用程序进行交互,就像普通用户在浏览器中所做的那样。

    如何在您的应用中设置位置?用户可以手动设置吗?如果是,您应该在规范中的 before 块中执行此操作。

    【讨论】:

    • 是的..我明白了。但是我将如何更改位置?现在,geokit 正在获取该位置。但我可以更改 session[:location]="US"。我也不能把它放在每个块之前..它正在引发“nil:NilClass 的未定义方法'会话'”错误
    • 你有没有想过这个问题?我希望能够进行 session[:user_id]=123 以避免每次都必须登录。
    【解决方案2】:

    这并不像你说的那样。在 Cucumber 场景中,我们有机会测试一些案例,并且您必须进行更改以为这些案例创建一些背景,例如在 Given 块中创建一些用户或向 db 添加一些想法等。是与 db 和 i thnik 相同的资源,您应该有机会为测试做准备。不管它与最终用户的联系有多紧密。

    想象一下,您创建了一些多步骤应用程序,您可以在其中保存会话中步骤之间的一些信息。如果没有这几个步骤,您的客户甚至无法想象他的预订。因此,从这一点来看,似乎并没有为每一步单独创建验收测试做出任何努力。但是在您的客户想要在第四步添加一些额外的超级用户友好验证之后。现在他只对这一面和这个验证感兴趣。也许他可以处理其他额外的第四步,但为什么呢?他已经看到了所有这些工作人员并接受了。

    你怎么看这个观点?

    【讨论】:

    • 理想情况下应该是可能的。正如您所说,可以在 before :each 部分中修改数据库,但是在浏览器甚至访问页面之前修改会话变量是没有意义的。
    • 你知道,我在想这样的想法:
    • 你知道,我在想这样的想法:功能超级非常友好的验证:),场景:最终用户未填写必填字段,给定最终用户未填写 ,当按书,然后...所以在给定步骤中,您可以将所有您需要访问和准备的页面放在第 4 步预订流程中,从第一步开始并继续到第 4 步。
    猜你喜欢
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多