2

次のような仕様があります。

foo.members << bar
# test some aspect of bar which assumes its membership in foo
  • spec を個別に実行すると (コマンド ラインで rspec がファイルを指すようにするか、guard がファイル全体またはファイルの変更を検出した後に 1 つの例だけを実行するかのいずれかで)、パスします。
  • テストスイート全体を実行すると (全体を実行するか、実際には全体を呼び出すだけ:focusで、単一の例を使用して、上記の最初の箇条書きのように実行される唯一のものになるようにします)、失敗します。

これで修正されます:

foo.members << bar
bar.reload # <-- the fix
# test some aspect of bar which assumes its membership in foo

したがって、何らかの理由で、最初のケースでは bar のメンバーシップがメモリ内で適切に更新され、2 番目のケースではそうではありません。なんで?

4

1 に答える 1

1

スイート内の他のどの仕様(複数ある場合もあります)が問題のテストに干渉しているのかを特定することをお勧めします。そのファイルと他の1つのファイルの仕様を一度に開始し、この仕様を失敗させるテストファイルが見つかるまで継続することをお勧めします(これは手動またはシェルスクリプトを介して実行できます)。これを妨害している他の仕様を分離したら、私たちに知らせてください。そうすれば、そこから進むことができます。

原則として、そしておそらくご存知のように、テストは互いに独立している必要があり、互いに干渉してはなりません。たとえば、仕様がメソッドをスタブアウトしたり、データベースに作成されたものを残したりしていないことを確認してください。

于 2013-02-15T00:03:36.700 に答える