Rspec2: response.should render_template ("new") после сбоя неверных параметров - PullRequest
2 голосов
/ 08 февраля 2011

Я тестирую контроллер в RSpec2, и для моих действий по созданию и обновлению при передаче недопустимых параметров контроллер должен отображать либо «новый», либо «редактирующий» шаблоны соответственно. Он делает это, но мой тест никогда не проходит.

describe "with invalid params" do
    before(:each) do
      User.stub(:new) { mock_user(:valid? => false, :save => false) }
    end

    it "re-renders the 'new' template" do
      post :create, :company_id => mock_company.id
      response.should render_template("new")
    end
  end

Результаты в этом:

re-renders the 'new' template
expecting <"new"> but rendering with <"">

Вот действие контроллера:

respond_to do |format|
  if @user.save
    format.html {
      flash[:notice] = "#{@user.full_name} was added to #{@company.name}."
      redirect_to company_users_url(@company)
    }
  else
    logger.debug @user.errors
    format.html{
      render :new
    }
  end
end

Эта проблема также, кажется, изолирована от этого контроллера. У меня есть почти идентичный код под управлением другого контроллера, и это нормально. Я не уверен, где может быть проблема.

Обновление: Вот два ложных метода

def mock_user(stubs={})
  @mock_user ||= mock_model(User, stubs).as_null_object
end

def mock_company(stubs={})
  (@mock_company ||= mock_model(Company).as_null_object).tap do |company|
    company.stub(stubs) unless stubs.empty?
  end
end

1 Ответ

1 голос
/ 02 марта 2011

Оказалось, это была проблема с заглушкой и CanCan. CanCan загружал ресурсы и использует несколько других методов, чем я думал.

...