1

Cheezy の PageObject を使用して、いくつかのキュウリ テストをセットアップしています。Jeff Morgan の本 "Cucumber & Cheese" のように、ほとんどすべてをセットアップしています。

現在、変数@tagを設定するメソッドを持つページオブジェクト「PublishPage」セットアップがあります。たとえば、私はファイル publish_page.rb に持っています

Class PublishPage
  def tag
  #some steps left out
  @tag = "123"
  end

  def verify_tag
  #some steps left out
  @tag.should include "2"
  end
end

Cucumber のステップでは、ステップの 1 つに がありon_page(PublishPage).tag、別のステップに がありon_page(PublishPage).verify_tagます。私のenv.rbファイルにはrequire 'rspec-expectations'.

問題は、このコードを実行すると、というエラーが表示されることundefined method 'include' for #<PublishPage:xxxxxx>です。しかし、verify_tag メソッド内のコードをステップに移動すると、@tag にアクセスできないことを除いてすべてが機能します...

4

2 に答える 2

0

これは追加するのと同じくらい簡単なはずです

include RSpec::Matchers

ページオブジェクトに。

もう1つの方法は@tag、何らかの方法で公開してから、キュウリのステップで次のように言うことです。

on_page(PublishPage).the_displayed_tag.should include("2")
于 2012-10-25T18:00:21.947 に答える
0

on_page(PublishPage) を呼び出すたびに、新しいページ オブジェクトがインスタンス化されます。新しいオブジェクトからインスタンス変数を参照しているため、「nil を文字列に変換できません」というエラーが発生する可能性が高く、値は nil です。page.tag と page.verify_tag の呼び出しの間にページ オブジェクトを 1 回だけインスタンス化すると、このエラーは発生しなくなります。

このようにすると、ページ オブジェクトの 1 つのインスタンスが使用されるため、ステップ定義間で保持できます。

When /I publish a tag/ do
   #on_page(PublishPage).tag
   @publish_page = PublishPage.new @browser
   @publish_page.tag
end

Then /I should have my tag/ do
   @publish_page.verify_tag 
end

お役に立てれば!

于 2013-04-12T03:40:58.997 に答える