2017-07-25 3 views
0

Comment puis-je doubler @user var, si je ne doublez pas, le test jeter erreur deComment puis-je doubler variable dans la méthode dans des rails rspec

update_attributes d'appel de néant: NilClass

class TestController 
    def foo! 
     @user = current_user 
     @user.update_attribute(user_params) 
    end 
end 

RSpec.describe TestController, type: :controller do 
    describe "#foo" do 
     it "should be passed" do 
      @specific_user = FactoryGirl.create(:user) 
      allow_any_instance_of(TestController).to receive(:foo!).and_return(true) 
      allow_any_instance_of(TestController).to receive(@user).and_return(@specific_user) 
     end 
    end 
end 

Répondre

1

Le problème avec votre test est qu'il ne teste rien. Le test du contrôleur doit faire une demande de tester la méthode get :foo!

A propos stubbing, dans votre méthode cas current_user peut être bouchonné à la place:

RSpec.describe TestController, type: :controller do 
    describe "#foo" do 
    it "should be passed" do 
     @specific_user = FactoryGirl.create(:user) 
     allow(controller).to receive(:foo!).and_return(true) 
     allow(controller).to receive(:current_user).and_return(@specific_user) 
    end 
    end 
end 

Et oui, dans le test du contrôleur de l'instance du contrôleur peut être consulté par appelant la méthode controller.

Ce qui permet également de définir une variable d'instance dans ce contrôleur:

RSpec.describe TestController, type: :controller do 
    describe "#foo" do 
    it "should be passed" do 
     @specific_user = FactoryGirl.create(:user) 
     allow(controller).to receive(:foo!).and_return(true) 
     controller.instance_variable_set(:@user, @specific_user) 
    end 
    end 
end