Контроллер рельсов для испытаний с rspec - PullRequest
4 голосов
/ 01 марта 2010

Я новичок в rails и пытаюсь протестировать контроллер с помощью rspec. Мой первый тест - когда вызывается действие show, он должен искать категорию по URL.

Проблема в том, что когда я добавляю код заглушки, я получаю следующую ошибку:

неопределенный метод `find 'для #

мой тест выглядит так:

require 'spec_helper'

describe CategoriesController do
    describe "GET /category-name/" do
        before(:each) do
            @category = mock_model(Category)
            Category.stub!(:find).with(:first, :conditions => ["url = :url", {:url => "category-name"}]).and_return(@category)
        end

        it "should find the category by url" do
            controller.show
            Category.should_receive(:find).with(:first, :conditions => ["url = :url", {:url => "category-name"}]).and_return(@category)
        end
    end
end

1 Ответ

10 голосов
/ 01 марта 2010

Ваш звонок на запрос должен быть после любого should_receive. Это напряженная вещь. Так что это выглядит примерно так: «Категория должна что-то получить, когда это происходит ». «Это происходит» относится к запросу.

it "should find the category by url" do
  Category.should_receive(:find).with... 
  get "show", { your params, if you're sending some in }
end

Кроме того, вы хотите пойти по пути запроса против вызова самого метода контроллера, по крайней мере для этого конкретного теста.

Итак

post   "action_name"
get    "action_name"
update "action_name"
delete "action_name"

вместо

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