rspec 3 - stub um método de classe


94

Estou atualizando de rspec 2.99 para rspec 3.0.3 e converti métodos de instância para usar allow_any_instance_of, mas ainda não descobri como criar um método de classe de stub. Eu tenho um código como este:

module MyMod
  class Utils
    def self.find_x(myarg)
      # Stuff
    end
  end
end

e meu teste rspec 2 faz isso:

MyMod::Utils.stub(:find_x).and_return({something: 'testing'})

Qual é a maneira Rspec 3 de fazer isso?

Respostas:


172

Você deveria fazer

allow(MyMod::Utils).to receive(:find_x).and_return({something: 'testing'})

Confira os stubs do método doco .


Estou tentando implementar isso, mas quando escrevo aquele mock e, em seguida expect(Class.foo).to eq(bar), recebo um "erro de número errado de argumentos" porque o foométodo normalmente quer 2 argumentos ... mas eu só quero que ele retorne o que coloquei no esboço
sixty4bit

FWIW, este formulário travaria meu interpretador de rubi. No entanto, and_return não é estritamente necessário e pode ser desativado. (Meu intérprete de rubi também não trava.)
Ray Fix

2
@ sixty4bit Existe uma razão pela qual você não pode chamá-lo com argumentos?
David Moles,

4
@ sixty4bitexpect(Class.foo).to receive(bar).with(arg1, arg2).and_return({..object})
zhisme
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.