Je suis au chapitre 10 du livre Foundation Rails 2. Nous travaillons avec RSpec.Pourquoi mon test Ruby on Rails RSpec passe-t-il avec @plugin et @plugins?
Nous testons l'action 'index' du 'PluginsController'.
Voici le code pour le contrôleur:
class PluginsController < ApplicationController
# GET /plugins
# GET /plugins.xml
def index
@plugins = Plugin.find(:all)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @plugins }
end
end
Voici le code pour les tests de ce contrôleur:
require File.dirname(__FILE__) + '/../spec_helper'
describe PluginsController, " GET to /plugins" do
before do
@plugin = mock_model(Plugin)
Plugin.stub!(:find).and_return([@plugin])
end
it "should be successful" do
get :index
response.should be_success
end
it "should find a list of all plugins" do
Plugin.should_receive(:find).with(:all).and_return([@plugin])
get :index
end
it "should assign the list of plugins to a variable to be used in the view"
it "should render the index template"
end
Quand nous écrivions notre test, je pensais que cette ligne
Plugin.should_receive(:find).with(:all).and_return([@plugin])
aurait dû avoir
@plugins
et non
@plugin
parce que dans le contrôleur, nous avons
def index
@plugins = Plugin.find(:all)
Je voulais voir ce qui se passerait si je changeais
Plugin.should_receive(:find).with(:all).and_return([@plugin])
à
Plugin.should_receive(:find).with(:all).and_return([@plugins])
et le test réussi.
Alors ... pourquoi est-ce @plugin et pas @plugins? Et ... pourquoi le test passe-t-il avec les deux?
À la votre!
OK, c'est logique. Merci, Jimmy. Je me demande encore, mais ... dans 'PluginsController' nous avons index def = @plugins Plugin.find (: tous) alors pourquoi ne pas utiliser @plugins dans le test? Pourquoi utilisons-nous @plugin comme dans @plugin = mock_model (Plugin)? – user169320
Eh bien, cela dépend de vous. C'est juste une variable d'instance utilisée dans les tests, donc vous pouvez choisir le nom que vous voulez. Peut-être un meilleur nom serait '@ mocked_plugin'. Je suppose que la raison pour laquelle ils l'ont appelé '@ plugin' et non' @ plugins' dans le livre est parce que ce n'est pas un tableau de mocks (seulement une seule instance, donc pas de pluriel) –