【问题标题】:How to create integration level test for two user interaction?如何为两个用户交互创建集成级别测试?
【发布时间】:2009-09-23 00:00:46
【问题描述】:

您将如何测试与 Cucumber/webrat 的多用户交互?

意味着必须有多个用户登录。很好的例子是简单的聊天应用程序,我想将消息从一个用户发送给另一个用户并检查其他用户是否收到了消息。

我想在集成级别进行测试,没有任何存根或模拟。

【问题讨论】:

    标签: ruby-on-rails cucumber integration-testing webrat


    【解决方案1】:

    我会使用 Selenium RC 和两个单独的实例来控制单独的浏览器。我想可能还有其他用于基于 Web 的集成测试的工具,它们与 Selenium 一样有用,甚至更多,但就我个人而言,我还没有遇到过。

    【讨论】:

      【解决方案2】:

      我知道应该怎么做,只是找不到合适的地方去做:

      您需要创建第二个Webrat::Session 实例,您免费获得的原始webrat_session 可以是一方,而新的可以是另一方。我可能会创建两个新的命名会话,以便我可以命名它们。

      alice = Webrat::Session.new #I think I have to hook this into merb and I don't know how
      bob = Webrat::Session.new
      
      alice.visit url(:chat)
      bob.visit url(:chat)
      alice.fill_in('chat', 'Hi, bob')
      bob.visit url(:chat) #simulate poling
      bob.responce.body should_contain "alice: Hi, bob"
      

      【讨论】:

        【解决方案3】:

        HTTP 是一种拉取协议,这意味着当其他人执行某项操作时,无法通知用户。因此,只需在场景中途切换用户就足够了。以您的聊天为例,这是您将使用的黄瓜场景

          Scenario: Send a message
            When I login in as "user_a"
                And I go to the chat page
                And I fill in "message" with "blah blah"
                And I press "Send"
                And I switch_user_to "user_b"
                And I go to the chat page
            Then I should see "blah blah"
        

        即使您的页面通过 ajax 发送轮询请求以获取最新消息,它仍然在发送请求。在这种情况下,您可以通过简单地执行 user_b 调用 ajax 请求正在调用的 url 的步骤来测试 ajax 调用。

        【讨论】:

        • an entire field 关于如何避免轮询此类事情的 ajax 调用,但提出的问题并未涉及这些问题。问题是如何在同一个测试中使用两个会话。
        猜你喜欢
        • 2021-01-03
        • 1970-01-01
        • 1970-01-01
        • 2022-07-06
        • 2019-10-29
        • 1970-01-01
        • 1970-01-01
        • 2013-12-31
        • 2020-01-03
        相关资源
        最近更新 更多