小编Rah*_*hul的帖子

Capybara nested_form Poltergeist选择动作

我正在使用梦幻般的nested_form gem来处理我的嵌套属性,这些属性非常有效.

当我尝试使用Capybara/rspec与Poltergeist作为驱动程序在我的嵌套表单的选择字段上运行一些集成测试时,我的问题就出现了.

我的测试如下.

click_on "Add Field"    
find('input:last').set "Employee Code"   
find('select:last').select "Word"
Run Code Online (Sandbox Code Playgroud)

我在rspec中收到以下错误

Failure/Error: find('select:last').select "Word"
 Capybara::Poltergeist::ObsoleteNode:
   Capybara::Poltergeist::ObsoleteNode
Run Code Online (Sandbox Code Playgroud)

当我在尝试找到'select:last'之前打印html内容时,我能够看到正确的html.贴在下面.

<input class="string required" id="source_model_attributes_attributes_1355377152026_field_name" label="Field Name" name="source[model_attributes_attributes][1355377152026][field_name]" placeholder="Field Name" size="50" type="text">
<select class="select required" id="source_model_attributes_attributes_1355377152026_field_type" label="Field Type" name="source[model_attributes_attributes][1355377152026][field_type]" prompt="Select Field Type">
<option value="">Select Field Type</option>
<option value="Word">Word</option>
<option value="Number">Number</option>
<option value="True or False">True or False</option>
<option value="Date &amp; Time">Date &amp; Time</option>
<option value="Date">Date</option>
<option value="Time">Time</option></select>
Run Code Online (Sandbox Code Playgroud)

我正在使用find而不是fill_in,因为我的html是动态生成的,时间戳附加到id和name字段.

也许值得一提的是,我对Capybara的选择Action运气不佳,我试图像这样使用它.

select "Word", from: "Field Type"
Run Code Online (Sandbox Code Playgroud)

哪个失败,出现以下错误.

Failure/Error: select "Word", from: …
Run Code Online (Sandbox Code Playgroud)

select rspec nested-forms capybara poltergeist

5
推荐指数
0
解决办法
916
查看次数

Rspec极其缓慢

我的rspec测试似乎运行速度非常慢,即使有防护和spork.

Finished in 5.36 seconds
13 examples, 2 failures
Run Code Online (Sandbox Code Playgroud)

我知道我可以做几件事来优化我的测试并减少与数据库的交互,但我强烈怀疑spec_helper设置不正确.我在轨道3.2.11与mongoid.每次运行后数据库清理程序都会清理.

spec_helper.rb

require 'rubygems'
require 'spork'
Spork.prefork do
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
  require 'rspec/autorun'
  require 'capybara/rspec'

  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
  DatabaseCleaner[:mongoid].strategy = :truncation

  RSpec.configure do |config|
    config.infer_base_class_for_anonymous_controllers = false
    config.order = "random"
    config.filter_run focus: true
    config.filter_run_excluding :remove => true
    config.run_all_when_everything_filtered = true
    config.include Mongoid::Matchers
    config.include Capybara::DSL
    ActiveSupport::Dependencies.clear
  end
end


Spork.each_run do
  Fabrication.clear_definitions
  RSpec.configure do |config|
    config.before(:each) do
      DatabaseCleaner.clean
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

更新:问题出在我的一个测试中.这需要3秒钟.请查看@Sam Peacey的答案,了解我用于获得以下结果的命令

Dynamic Model should …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails spork rspec-rails ruby-on-rails-3 database-cleaner

3
推荐指数
1
解决办法
4717
查看次数