0

DB のないモジュラー Sinatra アプリがあり、memcache をテストするために、ファイル システムで作成および削除する必要があるテスト ファイルがいくつかあります。いくつかのヘルパー メソッドを使用して、AfterConfiguration フックでこれらのファイルを生成したいと思います (rspec と共有されているモジュールにあり、テストのためにこれらのファイルを作成/削除する必要もあります)。Cucumber の起動時に一度だけ作成したい。

「support/hooks.rb」にある AfterConfiguration 内からヘルパーにアクセスできないようです。ヘルパーは Cucumber のステップからアクセスできるので、適切にロードされていることがわかります。

この以前の投稿には答えがあるようです:キュウリを実行する前にシード データをロードしたい

この回答の 2 番目の例は、モジュールが AfterConfiguration ブロックにアクセスできるようにする必要があると言っているようですが、ヘルパー メソッド「foo」を呼び出そうとすると、「nil:NilClass の未定義のメソッド「foo」」が表示されます。

すべてを rakefile に取り出してそのように実行することはできますが、ここで何が欠けているのか知りたいです。

4

1 に答える 1

0

コードを調べてみると、AfterConfiguration は機能が読み込まれる前に実行されるだけでなく、World がインスタンス化される前にも実行されるようです。AfterConfig ブロック内で self.class を実行すると、NilClass が返されます。Before などの他のフック内で self.class を実行すると、MyWorldName が返されます。振り返ってみると、すべての機能が World の個別のインスタンスで実行されるため、これは理にかなっています。

これが、インスタンス メソッドとして定義されたヘルパー (つまり、def method_name) が不明な理由です。メソッドをモジュール メソッド (つまり、def ModuleName.method_name) に変更すると、実際にはモジュール メソッドであるため、機能するようになります。

于 2013-02-16T08:14:20.987 に答える