2008-10-28 13 views
26

Rails denetleyicimde, aynı model sınıfının birden fazla örneğini oluşturuyorum. Bazı RSpec beklentilerini eklemek istiyorum, bu yüzden doğru parametrelerle doğru sayıyı oluşturduğunu test edebilirim. Yani, burada benim spec yanı da bu: o grup arkadaşı sınıf yalnızca 1 "should_receive" beklenti buna gerçekten karar gibi görünüyor, çünkü bu soruna neden oluyorsaBir nesneyi RSpec kullanarak nasıl çoklu istemciden beklentiler ekleyebilirim?

 
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => @user.id, :position_id => 1, :is_leader => true) 
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "2222", :position_id => 2) 
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "3333", :position_id => 3) 
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "4444", :position_id => 4) 

. Ben örnek çalıştırdığınızda yani, ben şu hatayı alıyorum:

 
Spec::Mocks::MockExpectationError in 'BandsController should create all the bandmates when created' 
Mock 'Class' expected :create with ({:band_id=>1014, :user_id=>999, :position_id=>1, :is_leader=>true}) but received it with ({:band_id=>1014, :user_id=>"2222", :position_id=>"2"}) 

olanlar ikinci çağrı oluşturmak için doğru parametreler vardır, ama RSpec yanlış parametrelerle karşı testidir.

Birden çok farklı aramaya izin vermek için should_receive beklentilerimi nasıl kurabilirim bilen var mı?

+0

Bu işe yaramalı. RSpec'in hangi sürümünü kullanıyorsunuz? Özellestirilmis yöntemleri siradan sekilde aramayı deneyin (Bandmate.create (...: user_id => @ user.id ...); Bandmate.create (...: kullanici_kimliği => "2222" ...); ...) ve işe yarayıp yaramadığını görün. –

cevap

34

Birden çok beklenti sorun değildir. Karşılaştığınız sıralar, sıralanmamış beklentilerle ilgili özel mesajlarınız verildiğinde sorunların sıralanmasıdır. Beklenti emri hakkındaki ayrıntılar için this page numaralı telefonu kontrol edin.

Kısa hikaye, beklentilerinizin sonuna .ordered eklemeniz gerektiğidir.
my_mock.should_receive: (simetrik) .twice (: sym) .exactly (n)
my_mock.should_receive .times:

+0

Huh, şu an bile çalışmıyor. Yanlışlıkla kodumda bir hatam oldu ve RSpec'i suçluyordum. Bahşiş için teşekkürler! – Micah

+0

link github – xxjjnn

+0

üzerinde 404 Eski sayfa 404 var. Ben şimdi bu olduğuna inanıyorum: http://rspec.info/documentation/3.3/rspec-mocks/#Ordering – AmitA

-1

Mock Receive Counts

my_mock.should_receive (simetrik) olun bir kez
my_mock.should_receive (: sym) .at_least (: Bir kez)
my_mock.should_receive (: sym) .at_least (: iki kez)
my_mock.should_receive (: sym) .at_least (n) x
my_mock.should_receive (: sym) .at_most (: bir kez)
my_m ock.should_receive (: sym) .at_most (: iki kez)
my_mock.should_receive: (: sym) çok RSpec 2.5 için

Çalışmaları .any_number_of_times (simetrik) .at_most (n)
my_mock.should_receive .times.

+14

, her çağrı için alınması gereken farklı argümanları kapsamaz. – sevenseacat

+1

Farklı yayınlarla nasıl yapıyorsunuz? –

İlgili konular