0

いくつかの共有要素を持つ記事ページ、ニュース ページ、コメント ページがあります。現時点では、次のように、共有要素をロードしてテストするためのさまざまな手順があります。

article_page.feature

Given I visit the Article page "Article title"
Then I should see the article title "Article title"
And I should see the summary "article summary"

article_steps.rb

Given('I visit the Article page {string}') do |title|
  article_page.load(slug: title.parameterize)
end

Then('I should see the article title {string}') do |title|
  expect(article_page).to have_content(title)
end

Then('I should see the summary {string}') do |summary|
  expect(article_page.summary.text).to eq(summary)
end

comment_page.feature

Given I visit the Comment page "Comment title"
Then I should see the comment title "Comment title"
And I should see the summary "comment summary"

comment_steps.rb

Given('I visit the Comment page {string}') do |title|
  comment_page.load(slug: title.parameterize)
end

Then('I should see the comment title {string}') do |title|
  expect(comment_page).to have_content(title)
end

Then('I should see the summary {string}') do |summary|
  expect(comment_page.summary.text).to eq(summary)
end

記事.rb

module UI
  module Pages
    class Article < UI::Page
      set_url '/en/articles/{/slug}'

      element :summary, '.summary'
    end
  end
end

ワールド/pages.rb

module World
  module Pages
    def current_page
      UI::Page.new
    end

    pages = %w[article comment]

    pages.each do |page|
      define_method("#{page}_page") do
        "UI::Pages::#{page.camelize}".constantize.new
      end
    end
  end
end

World(World::Pages)

動作しますが、さらにいくつかのページがあり、いくつかの手順を共有したいと思います. load メソッドをページ パラメータとともに送信し、Page オブジェクトを初期化するさまざまな組み合わせを試しました。

shared_pa​​ge_steps.rb

Given('I visit the {string} page {string}') do |page_type, title|
  page = "#{page_type}_page"
  send(:load, page, slug: title.parameterize)
end

article_page.feature

Given I visit the "Article" page "Article title"

comment_page.feature

Given I visit the "Comment" page "Comment title"

エラーが発生しますcannot load such file -- article_page (LoadError)

私も試しました

shared_pa​​ge_steps.rb

Given('I visit the {string} page {string}') do |page_type, title|
  page = "#{page_type}"
  send(:load, page, slug: title.parameterize)
end

エラーが発生しますcannot load such file -- article (LoadError)

shared_pa​​ge_steps.rb

Given('I visit the {string} page {string}') do |page_type, title|
  page = "#{page_type}".classify.constantize
  @page = page.new.load(slug: title.parameterize)
end

エラーが発生しますuninitialized constant Article (NameError)

send(:load) を使用すると、ページ オブジェクトではなくファイルをロードしようとしているように見えます。文字列を定数に変換しclassify.constantizeても機能せず、UI::Pages::Article または UI::Pages::Comment を明示的に呼び出す必要があるかどうか疑問に思っていますが、その方法がわかりませんそれを動的に。

助言がありますか?

4

1 に答える 1

0

SitePrism#loadメソッドとパラメーター化の両方が広範囲にテストされています。

問題があると思われる場合は、ユースケースを減らして、ここで SSCCE を上げてください: https://github.com/natritmeyer/site_prism/issues複製可能な git リポジトリを使用して、問題を簡単に再現できるようにします。

メソッドをメタプログラミングしているため、コード署名にエラーがある可能性がありますが、これは簡単な 5 秒間の観察にすぎません。私はあなたがおそらくやりたいと思うsend("#{page}.load", *args)- しかし、私は十分に飛び込んでいません

于 2019-02-22T14:52:39.020 に答える