8

我正在尝试在 Google App Script 上执行 BDD。我知道原则上我应该能够使用 Cucumber、Capybara 和 Mechanize 的某种组合在非 Rails 外部站点上执行 BDD。在这种情况下,我正在尝试测试我创建的 Google App Script。

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

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 帖子是相关的:

如何使用 Cucumber 测试非 Ruby、非 Rack API

但我想使用 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。

无论如何,这里有最佳实践,还是我只是继续尝试替代方案?

令人抓狂的是,这里的 Capybara 说明: https ://github.com/jnicklas/capybara 说:

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

Capybara.app = MyRackApp

但这会产生一个不同的错误“未初始化的常量 Object::MyRackApp (NameError)”,我不确定 MyRackApp 应该是什么,或者在哪里可以找到(我在使用 ruby​​ 时遇到的一般问题:-/)我应该正在通过 cucumber 或 capybara 源来找出 MyRackApp 是什么?

无论如何,我想我会在这里记录所有这些 - 非常感谢任何建议。我希望能够 BDD 我的谷歌应用脚​​本......

4

2 回答 2

10

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

它的意思是:

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

Capybara 的 README 这个问题而更新。

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


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

我建议你使用内置的 selenium、poltergeistcapybara-webkitterminus

您的代码也可以使用以下方法编写得更好Capybara.configure

Capybara.configure do |config|
  config.run_server = false
  config.default_driver = :selenium
  config.app_host = 'https://www.google.com' # change url
end
于 2013-03-27T21:14:25.593 回答
7

来自 Jeroen van Dijk在此 Google 群组消息中,只需将您的 Capybara.app 设置为评估为 true 的内容。IE

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

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

于 2013-06-24T19:42:00.220 回答