Ни один маршрут не соответствует действительному объекту - PullRequest
1 голос
/ 30 января 2011

Прочитав это: Ошибка "Не найдено ни одного маршрута"?

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

По сути, я пишу спецификации (они работают быстро), и я не понимаю, почему actionpack выдает эту ошибку при применении к объекту, который не "сохранен".

По двум причинам:

  1. Почему он выбрасывает «Нет совпадений маршрутов», когда он действительно должен генерировать что-то более значимое (например, объект должен быть сохранен до того, как маршрут может быть построен, или идентификатор объекта равен нулю).Исключение кажется немного неясным.
  2. Мне вообще не нужно было сохранять объект, если все, что я пытаюсь сделать, это сгенерировать URL для этого объекта, учитывая, что идентификатор заполняется с использованием фабрики или чего-то подобного.

Это ограничение затрудняет написание быстрых тестов, если я что-то упустил ...

1 Ответ

1 голос
/ 31 января 2011

Правда, сообщение об ошибке немного неясно.Что касается вашего второго пункта, вам не нужно сохранять объект для генерации URL, помощник будет работать так же хорошо с литеральным значением.

building_path(1) # GET /buildings/1 => BuildingsController#show, params={:id=>"1"}

Так что в примере объект можно заменить налюбое значение:

get :show, :id => "1"

Например, если вы используете rails generate scaffold Article, RSpec создаст спецификацию, подобную этой:

  def mock_article(stubs={})
    (@mock_article ||= mock_model(Article).as_null_object).tap do |article|
      article.stub(stubs) unless stubs.empty?
    end
  end

  describe "GET show" do
    it "assigns the requested article as @article" do
      Article.stub(:find).with("37") { mock_article }
      get :show, :id => "37"
      assigns(:article).should be(mock_article)
    end
  end

, которая не попадает в базу данных.

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