代码之家  ›  专栏  ›  技术社区  ›  Sam Joseph

如何让Cucumber/水豚/机械化在外部非轨道场地工作

  •  8
  • Sam Joseph  · 技术社区  · 11 年前

    我正在尝试在谷歌应用程序脚本上进行BDD。我知道,原则上我应该能够使用黄瓜、水豚和机械化的一些组合在非轨道的外部站点上进行BDD。在这种情况下,我试图测试我创建的谷歌应用程序脚本。

    到目前为止,我已经在这个项目中获得了完整的代码:

    https://github.com/tansaku/GoogleAppScriptBDD

    然而,我目前陷入了这个错误:

    rack-test requires a rack application, but none was given (ArgumentError)
    

    我知道我不想使用机架,我一直在搜索论坛和堆栈溢出,到目前为止,我最好的猜测是我的黄瓜env文件中有这样的内容:

    require 'capybara/cucumber'
    Capybara.run_server=false
    Capybara.current_driver = :mechanize 
    Capybara.app_host = 'https://script.google.com/macros/s/AKfycbytA2xBsaQ0_FSJXNkPVXQekBnWD4hXPOaCjCT00wo/dev' 
    

    此SO职位相关:

    How to use Cucumber to test non-Ruby, non-Rack API's

    但我想使用Capybara,因为我正在测试HTML接口。此处描述了另一种替代方案:

    http://blogs.kent.ac.uk/webdev/2012/08/02/using-capybara-webkit-with-cucumber-without-rails-or-rack/

    我一直在关注这里的讨论:

    https://groups.google.com/group/cukes/browse_thread/thread/297163800eaf2968

    然而,我真的很想了解如何关闭Rack,我希望使用mechanize,而不是上面提到的博客文章中描述的webkit,因为我现在更了解mechanize。

    无论如何,这里有最佳实践吗?还是我一直在尝试替代方案?

    让人抓狂的是这里的水豚指示: https://github.com/jnicklas/capybara 这样说:

    如果您不使用Rails,请将Capybara.app设置为机架应用程序:

    Capybara.app=我的RackApp

    但这会产生一个不同的错误“未初始化的常量Object::MyRackApp(NameError)”,我不确定MyRackApp应该是什么,也不确定在哪里可以找到(我使用ruby时遇到的一个常见问题://)我应该通过黄瓜或水豚源来找出什么是MyRackpp吗?

    无论如何,我想我会把这一切记录在这里——非常感谢任何建议。我很想能够BDD我的谷歌应用程序脚本。。。

    2 回复  |  直到 7 年前
        1
  •  10
  •   Andrei Botalov    11 年前

    如果您不使用Rails,请将Capybara.app设置为机架应用程序:

    它的意思是:

    如果您正在测试的应用程序是Rack应用程序,而不是Rails,请将Capybara.app设置为您的Rack应用:

    水豚的自述 was updated 作为这个问题的结果。

    当您想对外部应用程序运行测试时,应该设置 Capybara.app_host 而不是 Capybara.app .


    我没有用过 capybara-mechanize 但我认为它可能不是测试外部非机架应用程序的最佳驱动程序。机械化继承了Racktest,Racktest用于测试具有Rack接口的应用程序(主要是Rails)。如果你的应用程序没有机架接口,那么水豚机械化可能不是最好的选择。

    我建议你使用内置的硒, poltergeist , capybara-webkit terminus

    此外,使用 Capybara.configure :

    Capybara.configure do |config|
      config.run_server = false
      config.default_driver = :selenium
      config.app_host = 'https://www.google.com' # change url
    end
    
        2
  •  7
  •   ottobar    11 年前

    来自Jeroen van Dijk on this Google group message ,只需将您的Capybara.app设置为评估为true的值即可。即

    Capybara.app = "make sure this isn't nil"
    

    只要Capybara.run_server设置为false,它就永远不会尝试启动应用程序。到目前为止,它对我来说是有效的。