Проблема в том, что вы заглушаете модель, поэтому она не сохраняется в базе данных.Это означает, что когда вы вызываете get :show, :id => 1
, запрос к базе данных ничего не возвращает и ваши тесты не пройдены.Заглушка хороша, когда вы хотите подделать ответ или объект без использования базы данных, но если вы зависите от реального кода Rails, который использует базу данных, вы не можете использовать этот метод, потому что в базе данных ничего не существует.Чтобы это исправить, я бы полностью отбросил окуренные модели и фактически создал их.
require 'spec_helper'
describe LinksController do
render_views
before(:each) do
user = User.create
@link = Link.create :title => "Reddit",
:url => "http://www.reddit.com",
:user => user
end
it "renders the index view" do
get :index
response.should render_template('links/index')
response.should render_template('shared/_nav')
response.should render_template('layouts/application')
end
it "renders the show view" do
get :show, :id => @link.id
response.should render_template('links/show')
response.should render_template('shared/_nav')
response.should render_template('layouts/application')
end
end
В конечном итоге вы также должны посмотреть на Фабричные камни, такие как Шам и Factory Girl , чтобыупростить создание тестовых данных.