41 votes

Exemple d'objet simulé RSpec

Je suis nouveau pour me moquer d'objets, et j'essaie d'apprendre à les utiliser dans RSpec. Quelqu'un peut-il envoyer un exemple (un bonjour, exemple de type monde d'objet Mock RSpec), ou un lien (ou toute autre référence) sur la façon d'utiliser l'API d'objet maquette RSpec?

65voto

Brian Points 4711

Voici un exemple d'une simple maquette que j'ai fait pour un contrôleur de test dans une application rails:

before(:each) do
  @page = mock_model(Page)
  @page.stub!(:path)
  @page.stub!(:find_by_id)
  @page_type = mock_model(PageType)
  @page_type.stub!(:name)
  @page.stub!(:page_type).and_return(@page_type)
end

Dans ce cas, je suis en se moquant de la Page & PageType modèles (Objets) ainsi que de déraciner quelques méthodes de je appel.

Cela me donne la possibilité d'exécuter un des tests de ce genre:

it "should be successful" do
  Page.should_receive(:find_by_id).and_return(@page)
  get 'show', :id => 1
  response.should be_success
end

Je sais que cette réponse est plus les rails spécifiques, mais j'espère que ça vous aide un peu.


Modifier

Ok, donc voici un exemple hello world...

Étant donné le script suivant (bonjour.rb):

class Hello
  def say
    "hello world"
  end
end

Nous pouvons créer la spécification suivante (hello_spec.rb):

require 'rubygems'
require 'spec'

require File.dirname(__FILE__) + '/hello.rb'

describe Hello do
  context "saying hello" do 
    before(:each) do
      @hello = mock(Hello)
      @hello.stub!(:say).and_return("hello world")
    end

    it "#say should return hello world" do
      @hello.should_receive(:say).and_return("hello world")
      answer = @hello.say
      answer.should match("hello world")
    end
  end
end

5voto

JoeManFoo Points 101

Je n'ai pas assez de points pour poster un commentaire pour une réponse, mais je voulais dire que l'on a accepté la réponse m'a aussi aidé à essayer de comprendre comment stub dans une valeur aléatoire.

J'avais besoin d'être en mesure de stub une instance de l'objet de valeur qui est attribuée de façon aléatoire par exemple:

class ClumsyPlayer < Player do

  def initialize(name, health = 100)
    super(name, health)
    @health_boost = rand(1..10)
  end
end

Ensuite dans mon spec j'ai eu un problème à comprendre comment stub maladroit d'un joueur aléatoire de la santé pour tester que, lorsqu'ils reçoivent un soin, ils obtiennent le bon coup de pouce pour leur santé.

Le truc, c'était:

@player.stub!(health_boost: 5)

De sorte qu' stub! a la clé, j'avais été tout simplement à l'aide de stub et était encore en train aléatoire rspec réussites et des échecs.

Merci donc de Brian

2voto

rogerdpack Points 12806

http://rspec.info/documentation/mocks/

http://rspec.info/documentation/mocks/stubs.html est ce que j'utilise généralement, bien que ce ne soit pas une indication de la qualité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X