1

現在、「ページオブジェクト」パターンを使用するようにキュウリテストの全負荷をリファクタリングしていますが、RSpecマッチャーの使用で多くの問題が発生しています。

私が持っている既存のステップは次のとおりです。

Then /^I should (not )?see the following alerts:$/ do |negate, alerts|
  expectation = negate ? :should_not : :should

  within(ALERT_TABLE_ID) do
    alerts.hashes.each do |alert|
      page.send(expectation, have_content(alert["Original ID"]))
    end
  end
end

私のリファクタリングされたステップは次のとおりです。

Then /^I should (not )?see the following alerts:$/ do |negate, alerts|
  expectation = negate ? :should_not : :should

  @alert_reporting_panel = AlertReportingPanel.new(Capybara.current_session)
  @alert_reporting_panel.verify_contents expectation, alerts
end

そして私のパネルオブジェクトは次のとおりです。

class AlertReportingPanel
  def initialize(session)
    @session = session
  end

  def verify_contents(expectation, alerts)
    @session.within(ALERT_TABLE_ID) do
      alerts.hashes.each do |alert|
        @session.send(expectation, have_content(alert["Original ID"]))
      end
    end
  end
end

残念ながら、私は取得しundefined method 'have_contents' for #<AlertReportingPanel:0x3f0faf8> (NoMethodError)ます。私はクラスのトップに
追加しようとしました、そしてまたメソッドを完全に修飾しようとしました: 、しかし私はちょうど得る。 require 'rspec'have-contentCapybara::RSpecMatchers::HaveMatcher.have_contentuninitialized constant Capybara::RSpecMatchers (NameError)

私はRubyにかなり慣れていないので、これを修正するのは簡単だと確信しています...しかし、自分で解決することはできないようです。

助けてください。ありがとうございました。

4

2 に答える 2

3

少し前のことなので、もう答えがあると思いますが、ここに行きます。

* have_content *を取り込み、アクセスするには、必要なモジュールを含める必要があります。したがって、Panelオブジェクトは次のようになります。

class AlertReportingPanel
    include Capybara::DSL
    include Capybara::Node::Matchers
    include RSpec::Matchers

    def initialize... etc
于 2012-08-30T22:12:05.647 に答える
1

独自のページオブジェクトシステムを作成する代わりに、 SitePrismを使用してみることができます

私は少し偏見がありますが(私はその宝石を書きました)、それはあなたの生活を楽にするかもしれません。

于 2012-09-30T16:45:51.027 に答える