5

簡単な質問です。たとえば、キュ​​ウリの手順があります。

Given /We have the test environment/ do
  @user = # Create User model instance
  @post = # Create Post model instance
  # etc...
end

Thenステップでは、独自のクラスを使用して、テストのプロセスを簡素化します。

Then /all should be fine/ do
  # MyValidatorClass has been defined somwhere in features/support dir
  validator = MyValidatorClass.new
  validator.valid?.should be_true
end

MyValidatorClass インスタンス内で、上記のインスタンス変数 @user、@post などを処理します。

MyValidatorClass クラスのインスタンスから Cucumber 変数にアクセスするための最良かつ最も簡単な方法は何ですか?

class MyValidatorClass
  def valid?
    @post
    @user
  end
end

これで、すべての引数を手動で MyValidatorClass インスタンスに渡しました。

validator = MyValidatorClass.new @user, @post

しかし、私はこの目的が悪いと思います。Ruby を使用しているので、もっと透過的なものが必要です。

これを行う最善の方法は何ですか?

4

2 に答える 2

3

Worldスコープで定義されたインスタンス変数は、 World内でのみ使用できます。ステップ定義は World に属します。MyValdatorClassWorld by の中に入れる必要がありWorld{MyValdatorClass.new}ます。その後、このシナリオのステップ定義で以前に定義されたインスタンス変数が、このクラスおよび同じシナリオの他のステップ定義で使用可能になります。

あなたの質問に言及する他のいくつかの考え:


ステップがある場合は、次のようGiven we have the test environmentになります。

  • すべての機能でそれを複製します
  • 現在の機能の詳細を読むのに不要なものがあるため、機能が長くなり、読みにくくなっています
  • 不要な環境の詳細の設定には時間がかかります

インスタンスを作成するより簡単な方法は、インスタンスを作成するヘルパー メソッドを追加することです。

module InstanceCreator
  def user
    @user ||= # Create user instance in World
  end
  #etc
end
World(InstanceCreator)

次に、必要なときにこのユーザーを使用します (@ や @@ は使用しません)。

インスタンスの作成以外に何か必要な場合は、フックを使用してください

シナリオは自然に読めるようにする必要があります。自動化レイヤーを機能させるためだけに必要な手順でそれらを台無しにしないでください。


^ で始まり $ で終わる正規表現を使用することをお勧めします。これがないと、ステップの定義が柔軟になりすぎます。最初のステップの定義も一致しますGiven We have the test environment with some specifics

于 2012-07-04T22:53:08.117 に答える
0

私は可能なソウルションを見つけました。インスタンス変数からクラス変数に移行する必要があります。

Given /We have the test environment/ do
  @@user = # Create User model instance
  @@post = # Create Post model instance
  # etc...
end

Then /all should be fine/ do
  # MyValidatorClass has been defined somwhere in features/support dir
  validator = MyValidatorClass.new
  validator.valid?.should be_true
end

...    

class MyValidatorClass
  def valid?
    @@post
    @@user
  end
end
于 2012-07-02T08:05:51.000 に答える