特定のテストでは、私のサイトから複数の項目(package_sets
)をいくつかの注文に追加したいと思います。現実の世界ではRSpecはポストリクエストの間にインスタンス変数を保持します
context "with multiple package sets from different shops" do
let(:package_sets) { FactoryGirl.create_list(:package_set, 3) }
it "adds package sets to multiple orders" do
package_sets.each do |package_set|
post :create, {'package_set_id': package_set.id}
expect_json(success: true)
end
expect(Order.count).to eq(3)
end
end
、私はそれが異なるために設定されたパッケージを割り当てますpost :create
呼び出すたびに従うよう
それをテストするために、私がやります。注文の合計数が、私はこの
def order
@order ||= cart_manager.order(shop: package_set.shop, call_api: false)
end
のような方法以内に注文をmemoize私のコントローラ3.
である必要があり、それは3つの異なった要求なので、私はテストがメモ化せずに、あまりにもこの方法をリロードする期待していましたただし、post
要求の間には@order
がメモされているため、テストが失敗します。
どうしますか?
作業溶液、私はそれを承認するが、そこに実際にRSpecのを経由して、手動でリロードする他のソリューションではありませんよね? – Laurent
@Laurentおそらくあなたの例は非常に少ないですが、なぜコントローラーを3回テストし、それが3回実行されたかどうかを確認してください。一度それをテストしてみませんか? –
はい、テストセットが短縮されました。私は既に1つのリクエストでテストしています。私はこの方法でテストしています。なぜなら、すべてのものの下に大量の注文割り当てロジックがあり、アイテムを連続して追加すると正しく動作することを確認する必要があるからです。 – Laurent