FactoryGirl a stuby

witam
mam metode która wykonuje się after_create i którą chce wystubować

oczywiście gdy zrobię :

User.stub!(:moja_metoda).and_return(true) @user = User.create(:login => "sarin", :email => "sarin@example.com", :password => "tescik")
Jest super.

w przypadku gdy zrobie

User.stub!(:moja_metoda).and_return(true) @user = FactoryGirl.create(:user)
nie podziała - wywala mi sie na mojej metodzie, wywalając error świadczący o tym ze nie została wystubowana.

Okey - moge zrobic:

@user = FactoryGirl.build(:user) @user.stub!(:moja_metoda) { true } @user.save
To oczywiście też podziała
Aaaale

Gdy dalej używamy jakiejś fabryki która ma association do usera, problem niewystubowanej metody znowu się pojawia. (tak jak i w kazdym innym z poprzednich przypadków)

Czy da się to jakoś obejść, czy muszę zdecydować factorygirl || stuby ?

Pozdrawiam

To jest metoda klasy User, czy metoda instancji?

instancji.

No włąsnie więc User.stub!(:metoda) nie zadziała, bo wystubuje Ci metodę na obiekcie User, czyli obiekcie klasy a nie na obiekcie instancj. Czyli w ten sposób wystubujesz metodę:

class User
  def self.metoda
  end
end

Zajrzyj do dokumentacji rspec-mocks (http://rubydoc.info/github/rspec/rspec-mocks) i poszukaj metody any_instance, tam powinien być jakiś przykład jak tego użyć.

Chodzi o to, że chcesz wystubować metodę instancji, jeszcze nie mając tej instancji. W takim wypadku trzeba to wystubować dla wszystkich przyszłych instancji – stąd metoda any_instance.

Dzieki ;]