Tag: 黄瓜

gem如何提供Cucumberfunction和步骤定义?

我有两个Rails项目(A和B),其中包括以下gem: #project A gem “green_theme”, :path => “~/dev/themes/green_theme” gem “devel_tasks”, :path => “~/dev/themes/devel_tasks” #project B gem “red_theme”, :path => “~/dev/themes/red_theme” gem “devel_tasks”, :path => “~/dev/themes/devel_tasks” A和B两个项目都具有function和步骤的function目录。 红色和绿色这两个主题应该具有共同的function,如登录/注销按钮,html元标记等。 我需要做的是将共同主题相关的function和步骤放在devel_tasks gem中。 这样我就可以共享测试并使用它们来检查给定模板是否符合标准。 测试我需要做的一个简单方法是使用示例Cucumberfunction创建一个新的Rails项目,然后尝试运行“cucumber examples / i18n / en / features”。

Rails助手不在测试环境中工作

我已经按照http://railscasts.com/episodes/221-subdomains-in-rails-3上的教程进行了操作。 它允许您通过覆盖帮助文件中的url_for方法将子域选项传递给路由。 我的帮手方法看起来像这样: module UrlHelper def with_subdomain(subdomain) subdomain = (subdomain || “”) subdomain += “.” unless subdomain.empty? [subdomain, request.domain, request.port_string].join end def url_for(options = nil) if options.kind_of?(Hash) && options.has_key?(:subdomain) options[:host] = with_subdomain(options.delete(:subdomain)) end super end end 所以: sites_homepage_url(:subdomain => “cats”) 生成url: “http://cats.example.com/sites/1/homepage” 这在开发中工作得很好。 然而,在我的黄瓜测试中,使用: sites_homepage_url(:subdomain => “cats”) 生产: “http://www.example.com/sites/1/homepage?subdomain=cats” 这表示我在助手中添加到url_for的function不起作用。 有人有任何想法吗? 编辑:格式化并添加UrlHelper的代码。

Cucumber步骤定义中的实例变量(即什么是self)有什么对象?

我不理解在Ruby中使用Cucumber时的范围,特别是关于实例变量。 对于我的直接示例的上下文,在hooks.rb的Before部分中, hooks.rb了变量@browser 。 @browser = Watir::Browser.new @browser_selected.to_sym (其中@browser_selected通常是’chrome’) 在步骤定义中使用@browser。 举个简单的例子: @browser.send_keys(:tab) 我不明白的是什么对象包含@browser作为属性。 它在这方面有什么意义? 我知道我困惑的代码总是在一个块中,并且我认识到每个这样的块被使用(通过它附加的Given / When / Then消息)以某种神秘的方式进行预处理。 这种神秘的遮蔽是实例变量的范围。 如何知道这些块中的实例变量的范围?

Cucumber / Savon省略或删除日志记录输出

在运行黄瓜测试时,我得到(除了测试结果)以下forms的许多调试/日志相关输出: D, [2013-03-06T12:21:38.911829 #49031] DEBUG — : SOAP request: D, [2013-03-06T12:21:38.911919 #49031] DEBUG — : Pragma: no-cache, SOAPAction: “”, Content-Type: text/xml;charset=UTF-8, Content-Length: 1592 W, [2013-03-06T12:21:38.912360 #49031] WARN — : HTTPI executes HTTP POST using the httpclient adapter D, [2013-03-06T12:21:39.410335 #49031] DEBUG — : <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" … 有没有办法关掉这个输出? 我试过按照这篇文章中的说明操作,我的config_spec.rb文件是: require “spec_helper” describe Savon::Config do let(:config) { […]

如何在不删除`test`数据库数据的情况下测试JavaScripts?

我使用Ruby on Rails 3.2.2,cucumber-rails-1.3.0,rspec-rails-2.8.1和capybara-1.1.2。 我想使用Selenium来测试JavaScripts,但是每次在终端窗口中运行cucumber命令行时都不要删除test数据库数据。 也就是说,如果我声明如下function: Feature: … @javascript Scenario: … JavaScript也经过了预期的测试。 但是,在测试运行后, test数据库数据将被删除,我必须再次为该数据库播种,以便正确运行新测试。 我阅读了官方文档和ROOT_APP/features/support/env.rb文件中的文本(似乎我安装了所有必需的Rubygem – 请参阅下面有关我正在使用的Gemfile的更多信息)但我没有了解如何避免删除数据库数据以及如何配置Cucumber和Capybara gems以便正确使用Selenium。 我该怎么办? 注意I :我想制作上述内容,因为我想在“测试”/“运行”场景时拥有相同的test数据库数据 。 注意二 :为了在test数据库中播种数据(我的应用程序需要该数据工作),我在RAILS_ROOT_PATH/lib/tasks/cucumber.rake文件中添加以下代码,然后运行rake db:test:prepare命令终端窗口中的行。 namespace :db do namespace :test do task :prepare => :environment do Rake::Task[“db:seed”].invoke end end end 在ROOT_APP/features/support/env.rb文件中,我试图取消注释以下两个代码块( BTW :我从未更改由cucumber-rails gem自动生成的原始文件,因此它是默认的),但在运行测试后,它仍然删除test数据库数据。 # Before(‘@no-txn,@selenium,@culerity,@celerity,@javascript’) do # # { :except => [:widgets] } may […]

黄瓜之前的步骤

在Cucumber中是否有与AfterStep相当的BeforeStep? 如果没有 – 有没有人找到解决方案/解决方法?

Ruby – 无法在45秒内绑定到锁定端口7054(Selenium :: WebDriver :: Error :: WebDriverError)

我最近在尝试运行任何Cucumber测试时都开始看到此错误消息。 我做了一些研究,发现了一些其他类似的错误实例,但大多数是与浏览器相关的问题。 我在此输出中看不到任何特定于浏览器的错误消息: unable to bind to locking port 7054 within 45 seconds (Selenium::WebDriver::Error::WebDriverError) 我看到这里发布的另一个问题得到了回答( 一个seleniumwebdriver例外 ),但是这个解决方案对我不起作用。 运行“ lsof -i TCP:7054 ”不会产生任何输出。 万一有人建议这样做,我已经多次重新启动我的机器并擦掉我的gem并重新运行“捆绑”。 以下是我正在使用的相关gem: capybara (0.4.1.2) cucumber (0.10.7) cucumber-rails (0.4.1) fuubar-cucumber (0.0.9) selenium-webdriver (0.2.0) 可以肯定的是,我也尝试使用Firefox 3.6,4.0和5.0运行这些测试。 每次都是相同的消息。 不要成为阴谋理论家或任何东西,但在手动退出运行我的测试套件并对Cucumber启动的所有活动Firefox进程运行时,一切正常。 我在测试套件中同时运行了大约9个Firefox实例。 我不确定这是否会导致某些事情发生,从而产生我现在从运行Cucumber测试中看到的结果。 有没有人有解决这个问题的建议?

黄瓜:在所有情况下钩子只运行一次之前

我有一个包含多个场景的场景大纲。 我希望我的Before钩子只运行一次所以我可以引导我需要针对所有场景运行的ActiveRecord对象。 问题是如果我使用 Before do # my code here end 这将在每个场景之前执行。 反正有没有为整个大纲运行一次?

我如何有条件地跳过黄瓜中的场景?

我如何有条件地跳过场景? 例如,我希望仅在满足某些条件的情况下才继续使用方案,但如果不存在则我不希望将其注册为失败。

如何将Capybara纳入Cucumber项目的模块中

我定义了一个模块: module Support include Capybara::DSL def self.do_something click_link ‘Questions’ end end 它位于features / support / support.rb 我的env.rb: require ‘capybara’ require ‘cucumber’ require ‘capybara/cucumber’ Capybara.app_host = “http://www.stackoverflow.com” Capybara.run_server = false Capybara.default_driver = :selenium 我在steps.rb中调用模块的function: Support::do_something 我有例外: undefined method `click_link’ for Support:Module (NoMethodError) 如何在支持模块中提供Capybara?