2017-10-04 7 views
0

リストを含むレスポンスオブジェクトのファクトリを持っているので、そのリストのファクトリもありますが、build_listを作るたびに動的リストを取得しようとしていますコール。世界のrspec factorygirl変数リストのファクトリを構築する

現在の状態は以下の通りです:

次のようになりますAPI呼び出しと応答。コールの

pry(main)> get_customer('12345').class 
=> Com::ListResult 
pry(main)> get_customer('12345').c_list.class 
=> Array 
pry(main)> get_customer('12345').c_list[0].class 
=> Com::Customer` 

出力:

pry(main)> get_customer('12345') 
=> #<Com::ListResult:0xHEX 
    @c_list= 
    [#<Com::Customer:0xHEX 
    @account_id="12345", 
    @email="[email protected]">]> 

私は工場を作成していると私は一度だけget_customerコールを作りたい場合は、それが正常に動作します。 ここに工場を設置しているか:RSpecので

factory :customer_each, class: Com::Customer do 
    account_id "12345" 
    email "[email protected]" 
end 
factory :customer_list_result, class: Com::ListResult do 
    customer_list FactoryGirl.build_list(:customer_each, 1) 
end 

、私は私のモック結果を取得するには、以下があります。

allow(subject).to receive(:get_customer).and_return(build(:customer_list_result)) 

私はモックコールを行うたびに別のリストを取得しようとしています。 account_idが11111、22222などと予想されているようなシーケンスを試しましたが、私は常に11111を返します。変数account_idだけが必要なのでメールは問題になりません。

factory :customer_bulk, class: Com::Customer do 
    sequence(:account_id) {|n| "#{n}"*5} 
    email "[email protected]" 
    end 
    factory :customer_list_result, class: Com::ListResult do 
    customer_list FactoryGirl.build_list(:customer_bulk, 1) 
    end 
+0

'customer_list {FactoryGirl.build_list(:customer_bulk、1)}試し'。中括弧はFactoryGirlに内部のものを再評価させます。たとえば、乱数を取得するには、 'attribute rand(0..10)'の代わりに 'attribute {rand(0..10)}'を使用します。 – moveson

+0

これはうまくいきませんでした – skd

答えて

0

配列は、同じ試験における各ファクトリメソッド呼び出しのために1の値をバンプします。一度呼び出すと、最初のシーケンス番号(この場合は1)が返されます。

工場に電話するたびに乱数をaccount_idとして渡すだけで十分ですか?

factory :customer_bulk, class: Com::Customer do 
    # random 5-digit string 
    account_id { rand(1e4...1e5).to_i.to_s } 
    # or random string with same digit 
    account_id { "#{rand(10).to_s}" * 5 } 
end 
+0

私はIDの逐次増分を予測できるようにしたいと思いますが、私は先に進み、シーケンスコードを正しく入力しないで私を除外しようとしましたが、私はまだ同じ値を得ています毎回返されます。 – skd

+0

私は値の周りに角かっこ "{}"がありませんでした。ごめんなさい。 'account_id {rand(1e4..1e5).to_i.to_s}'を試してください。 私の最初の答えは、コードが解析された時点で乱数_once_を生成します。 – gkats

+0

クイックアップデートをありがとう。依然として同じ結果です。 build_listが実際に工場を再構築しているかどうかはわかりません。 – skd

0

いいえ、ブロックを返すようにrspecを変更するだけでした。

allow(subject).to receive(:get_customer) { (build(:customer_bulk)) }

関連する問題