【问题标题】:How should I deal with online dependencies when running Rspec offline?离线运行 Rspec 时应该如何处理在线依赖?
【发布时间】:2011-01-05 10:43:40
【问题描述】:

我想在连接到网络时和未连接到网络时运行 RSpec 来测试我的代码。

不幸的是,应用程序中有一些依赖于实时连接的测试 - 电子邮件发送、Facebook 集成等。

是否有创建在线/离线测试环境的最佳实践方法,或者这是一种不好的做法?从我在网上能找到的关于这个的信息来看,我猜是后者。

【问题讨论】:

    标签: ruby-on-rails offline rspec2


    【解决方案1】:

    通常在这种情况下,您会模拟连接到应用程序外部的代码部分。这使您可以针对所连接的服务/系统的预期结果进行测试。运行测试也更快。

    有一个关于使用 rspec here 进行模拟的简短教程,但我相信您自己可以找到很多。

    如果您通过 ActionMailer 发送电子邮件,还有其他方法可以测试电子邮件是否被发送。在rails testing guide 中有一个部分。

    编辑(回应评论): 您可以在TestHelper 中放置一个方法,以便仅在您在线时运行测试。比如:

    def when_online
      if test_remote_connectivity
        yield
      else
        puts "Skipping test offline."
      end
    end
    

    那么你可以这样称呼它:

    def test_facebook
      when_online do
        .....
      end
    end
    

    不确定我是否完全提倡它,但它可能会做你想做的事!

    【讨论】:

    • 感谢 Shadwell,非常有帮助。我已经在 stubbing 和 mocking 但我想知道是否有任何方法可以做一些事情: if testRemoteConnectivity @online = true else @online = false end pending @online do #remote dependency tests end 我怀疑我'我太担心什么了,但最好避免在断开连接时出现红色
    • 您可以编写一个方法来执行此操作,并且仅在您在线时运行依赖于在线的测试(如果您真的想要!)。从长远来看(对我而言),似乎比嘲笑/存根更多的努力。我将编辑我的答案。
    • 很好——这正是我正在寻找的逻辑类型。我同意您的评估,即这可能不是正确的做法,但很高兴看到如果需要代码将如何编写
    【解决方案2】:

    您可以在不想连接到远程资源的测试/规范中使用webmock

    【讨论】:

      猜你喜欢
      • 2014-05-26
      • 1970-01-01
      • 2017-12-02
      • 2010-12-23
      • 1970-01-01
      • 2016-10-10
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多