Почему мой тест Ruby on Rails RSpec проходит с @plugin и @plugins? - PullRequest
1 голос
/ 04 июня 2010

Я в главе 10 книги Foundation Rails 2. Мы работаем с RSpec.

Мы тестируем действие index для PluginsController.

Вот код для контроллера:

    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

Вот код для тестов для этого контроллера:

    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

Когда мы писали наш тест, я думал, что эта строка

Plugin.should_receive(:find).with(:all).and_return([@plugin])

должен был иметь

@plugins

а не

@plugin

потому что в контроллере у нас есть

def index
@plugins = Plugin.find(:all)

Я хотел посмотреть, что произойдет, если я поменяю

Plugin.should_receive(:find).with(:all).and_return([@plugin])

до

Plugin.should_receive(:find).with(:all).and_return([@plugins])

и тест пройден.

Итак ... почему это @plugin, а не @plugins? И ... почему тест проходит с обоими?

Ура!

1 Ответ

0 голосов
/ 04 июня 2010

Если у вас есть неопределенная переменная, как @plugins, поскольку вы не определили ее ранее в тесте, она будет отображаться как ноль.

Что на самом деле Plugin.should_receive(:find).with(:all).and_return([@plugins]) делает в этом случае, так это то, что он сообщает Plugin.find(:all) вернуть [nil], что в соответствии с вашим тестом является действительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...