我有这样的功能:
Feature: Searching chats In order to find chats As an user I want to find different chats by username or ad name Background: Given System prepares for chats And There is a few machines with names: | machine_1 | | machine_2 | | machine_3 | And There is a few services with names: | service_1 | | service_2 | | service_3 | And I have chats with ads owners Scenario: Searching chats When I am logged in as a "user" And I go to chats page # <- stops here Then I should see search results when I fill form with: | input | results | | ma | machine_1,machine_2,machine_3 | | se | service_1,service_2,service_3 |
当我启动黄瓜功能(或场景)时,它突然停在步骤“我去聊天页面”没有任何错误消息.结果如下:
[alex@MacBookPro ~/my_project | master]$cucumber features/chat/search.feature Using the default profile... @javascript Feature: Searching chats In order to find chats As an user I want to find different chats by username or ad name Background: # features/chat/search.feature:8 Given System prepares for chats # features/step_definitions/chats.steps.rb:11 And There is a few machines with names: # features/step_definitions/machine.steps.rb:10 | machine_1 | | machine_2 | | machine_3 | And There is a few services with names: # features/step_definitions/service.steps.rb:144 | service_1 | | service_2 | | service_3 | And I have chats with ads owners # features/step_definitions/chats.steps.rb:5 Scenario: Searching chats # features/chat/search.feature:20 When I am logged in as a "user" # features/step_definitions/user.steps.rb:68 And I go to chats page # features/step_definitions/chats.steps.rb:17 [alex@MacBookPro~/my_project | master]$
这是我的“下降”步骤:
When /^I go to chats page$/ do visit root_path within('.global-menu') do click_on username(@current_user) click_on I18n.t('views.menu.profile.links.dashboard') end click_on I18n.t('views.menu.profile.links.chats') end Then(/^I should see search results when I fill form with:$/) do |table| table.hashes.each do |search_data| ### searching ### @page.query.set search_data['input'] # for AJAX search sleep 1 ### show results ### search_data['results'].split(',').each do |res| page.should have_content res.mb_chars.upcase end within('#chats') do page.all('.chat').length.should == search_data['results'].split(',').size end end end
我正在使用带黄瓜的capybara-webkit.那是我的env.rb:
require 'rubygems' require 'spork' require 'capybara' require 'capybara/rspec' require 'selenium-webdriver' require 'site_prism' require 'capybara-screenshot/cucumber' # require 'cucumber/rails' # 1) Tag your scenario (or feature) with @allow-rescue # # 2) Set the value below to true. Beware that doing this globally is not # recommended as it will mask a lot of errors for you! # # ActionController::Base.allow_rescue = false ############################################################################# ENV['SKIP_RAILS_ADMIN_INITIALIZER'] = 'false' # This fixes weird errors with cucumber + rails_admin (http://makandracards.com/makandra/9597-rake-spec-+-rails_admin-weirdly-failing-specs). ############################################################################# Before do DatabaseCleaner.strategy = :truncation DatabaseCleaner.clean FactoryGirl.create(:setting) ContactType.generate_contact_types ContactType.generate_ims end Spork.prefork do require 'cucumber/rails' require 'email_spec' # add this line if you use spork require 'email_spec/cucumber' Capybara.default_selector = :css end Spork.each_run do ActionController::Base.allow_rescue = false begin DatabaseCleaner.strategy = :truncation rescue NameError raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it." end Capybara.register_driver :webkit do |app| Capybara::Webkit::Driver.new(app,:stderr => nil) end Capybara.javascript_driver = :webkit Cucumber::Rails::Database.javascript_strategy = :truncation end
当我将项目更新为rails4时出现问题.有任何想法吗?
解决方法
我管理的许多开发人员发现Capybara-webkit确实存在问题且不一致.
poltergeist / PhantomJS比它有很多优点.一般来说:
>更确定性,因为问题场景更可能一直失败而不是片状
>与机器相关性较小;我们的套件现在在我们所有的测试环境中都表现得非常相似
>提供更好的错误消息
>当有Javascript错误时失败,即使测试会通过
>不挂,并且
>更容易安装.
这是在二月自动化测试SF聚会上的good post from Dave Schweisguth约his presentation,在那里他讨论了他的公司(Fandor)的测试设置/环境,问题,故障排除和快速比较.它可能有助于您追踪问题.