1
$ruby --version
ruby 1.9.3dev (2011-09-23 revision 33323) [i686-linux]

gem 'rails', '3.2.9'

group :test do
  gem 'cucumber-rails', require: false
  gem 'capybara', '~> 2.0.3'
  gem 'rspec-rails'
  gem 'database_cleaner'
  gem 'factory_girl'
  gem "ffaker"
  gem "capybara-firebug", "~> 1.3.0"
  gem 'ruby-debug19'
end

Cucumber ステップの 1 つで、ドロップダウン要素 (<select> タグ) に次のコードで Capybara API を使用して選択された特定のオプションがあることをアサートしようとしています。

  within('#myForm') do
    page.has_select?("#event_type", selected: @event_type).should be_true
  end

しかし、私はこのエラーが発生しています:

   expected: true value
   got: false (RSpec::Expectations::ExpectationNotMetError)

シナリオで (capybara-firebug) の@firebugタグを使用して DOM を調べたところ、目的のオプション (@event_type が保持) がドロップダウンで選択されていることがわかりましたが、DOM では「選択された」属性が追加されていません。私が推測するselectタグに、期待が失敗する原因となっています。

ここで同様の参照を見つけました: https://github.com/jnicklas/capybara/issues/171 は、修正されたコミットについて言及していますが、コミットは私が使用しているカピバラのバージョンにマージされていないと思います。ソースコードを調べたところ、 https://github.com/jnicklas/capybara/issues/171に記載されている修正 がカピバラのコードベースに存在しないことがわかりました。

selectタグに特定のオプションが選択されていることを主張する方法を教えてください。

注:バージョンなしでGemファイルでカピバラを使用する場合:

gem 'capybara'

Capybara バージョン 2.1.0 のインストールが開始されますが、次のエラーで失敗します。

capybara requires Ruby version >= 1.9.3

私は必要なルビーバージョンを持っていますが。

以下はの出力です

  $ rvm info
  ruby-1.9.3-rc1:

system:
  uname:       "Linux jigneshgohel-Inspiron-N5110 3.2.0-40-generic-pae #64-Ubuntu SMP Mon Mar 25 21:44:41 UTC 2013 i686 i686 i386 GNU/Linux"
  bash:        "/bin/bash => GNU bash, version 4.2.24(1)-release (i686-pc-linux-gnu)"
  zsh:         " => not installed"

rvm:
  version:      "rvm 1.13.4 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]"
  updated:      "11 months 4 days 14 hours 20 minutes 18 seconds ago"

ruby:
  interpreter:  "ruby"
  version:      "1.9.3dev"
  date:         "2011-09-23"
  platform:     "i686-linux"
  patchlevel:   "2011-09-23 revision 33323"
  full_version: "ruby 1.9.3dev (2011-09-23 revision 33323) [i686-linux]"

homes:
  gem:          "/home/jigneshgohel/.rvm/gems/ruby-1.9.3-rc1"
  ruby:         "/home/jigneshgohel/.rvm/rubies/ruby-1.9.3-rc1"

binaries:
  ruby:         "/home/jigneshgohel/.rvm/rubies/ruby-1.9.3-rc1/bin/ruby"
  irb:          "/home/jigneshgohel/.rvm/rubies/ruby-1.9.3-rc1/bin/irb"
  gem:          "/home/jigneshgohel/.rvm/rubies/ruby-1.9.3-rc1/bin/gem"
  rake:         "/home/jigneshgohel/.rvm/gems/ruby-1.9.3-rc1/bin/rake"

environment:
  PATH:         "/home/jigneshgohel/.rvm/gems/ruby-1.9.3-rc1/bin:/home/jigneshgohel/.rvm/gems/ruby-1.9.3-rc1@global/bin:/home/jigneshgohel/.rvm/rubies/ruby-1.9.3-rc1/bin:/home/jigneshgohel/.rvm/bin:/usr/local/heroku/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/media/work/Environment/Languages/Java/jdk1.7.0_04/bin:/media/work/Environment/BuildTools/apache-maven-3.0.4/bin:/media/work/Environment/BuildTools/apache-ant-1.8.3/bin"
  GEM_HOME:     "/home/jigneshgohel/.rvm/gems/ruby-1.9.3-rc1"
  GEM_PATH:     "/home/jigneshgohel/.rvm/gems/ruby-1.9.3-rc1:/home/jigneshgohel/.rvm/gems/ruby-1.9.3-rc1@global"
  MY_RUBY_HOME: "/home/jigneshgohel/.rvm/rubies/ruby-1.9.3-rc1"
  IRBRC:        "/home/jigneshgohel/.rvm/rubies/ruby-1.9.3-rc1/.irbrc"
  RUBYOPT:      ""
  gemset:       "

以下は、次の出力です。

  $rvm list
  rvm rubies

  =* ruby-1.9.3-rc1 [ i686 ]

  # => - current
  # =* - current && default
  #  * - default
4

1 に答える 1

1

私はキュウリを使用しませんが、あなたの例では

within('#myForm') do
  page.has_select?("#event_type", selected: @event_type).should be_true
end

dom によって異なりますが、ここでは id セレクターで「#」を使用する必要はありません。また、「selected:」は値ではなくオプションのテキストにする必要があります。

そうあるべきです(@event_typeがテキストに表示しているものであると仮定します)

within('#myForm') do
  page.has_select?("event_type", selected: @event_type).should be_true
end

または私は好むだろう

page.should have_select('event_type', selected: @event_type)
于 2013-08-17T02:34:38.207 に答える