2016-03-25 1 views
0

私はテストの中でlet(:foo) { create_foo() }を使用しています。 create_fooはかなり時間のかかるセットアップを行うテストヘルパーです。RSpec let(:foo)を使用して

したがって、テストが実行されるたびにfooが作成され、それには時間がかかります。しかし、fooオブジェクト自体は変更されません、私はちょうどそのオブジェクトのテストメソッドを1つずつ、単一のテストに分けたいと思います。

ので、letのRSpecのと同等のように、複数の例間で変数を共有が、(fooが必要とされていない場合)、遅延ロードのような素敵なものを維持し、またfooの自動メソッド定義することがありそれは@fooで参照することなく、共有の例で使用できますか?

または私は単にあなただけの共有の例でそれを置くが、メモ化を使用することはでき

def foo 
    create_foo() 
end 
+0

あなたのオブジェクトはテストスイートのある時点で一度初期化され、変更されないので、いくつかの 'before(:suite) '設定で' create_foo'の結果を 'FOO'定数に代入すると、あなたは欲しいですか? –

答えて

1

を定義する必要がありますか?

def foo 
    @foo ||= create_foo() 
end 
+0

これをテストしたばかりですが、共有の例で使用すると、 '@ foo'は私の例の中で何らかの形で削除されます – 23tux

1

このようにしてletを使用すると、設計されたものとは逆になります。あなたは一度テストグループごとに実行されるbefore_allを使用して検討する必要があります。

before :all do 
    @instancevar = create_object() 
end 

CREATE_OBJECT(あれば、これは賢明ではないかもしれないことに注意してください)、それはカップリングを導入し、あなたのテストの間で状態を維持することができるので、データベースを打ちます。

+0

または' before:suite' –

関連する問題