Тест контроллера RSpec не пройден - как загрузить фиктивные данные? - PullRequest
2 голосов
/ 13 марта 2011

У меня есть 2 простых теста RSpec, которые я написал для небольшого приложения для рельсов, которое я сделал для изучения рельсов. Изначально у меня была фиктивная установка для моего класса Link, но у меня возникла та же проблема.

Это мой тестовый код:

require 'spec_helper'

describe LinksController do
  render_views
  before(:each) do
    link = Link.new
    link.stub!(:title).and_return("Reddit")
    link.stub!(:url).and_return("http://www.reddit.com")
    link.stub!(:created_at).and_return(Time.now)
    link.stub!(:updated_at).and_return(Time.now)
    link.stub!(:user_id).and_return("1")
    link.stub!(:id).and_return("1")
    link.save

    user = User.new
    user.save
  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 => 1
    response.should render_template('links/show')
    response.should render_template('shared/_nav')
    response.should render_template('layouts/application')
  end
end

Я новичок и в рельсах, и в RSpec, не уверен, что мне следует делать, чтобы заставить это работать. Как лучше всего протестировать этот метод показа из моего LinksController, когда вам нужны данные? Я тоже пробовал mock_model, но, возможно, я использовал его неправильно.

Вы можете увидеть весь код приложения на Github

1 Ответ

4 голосов
/ 13 марта 2011

Проблема в том, что вы заглушаете модель, поэтому она не сохраняется в базе данных.Это означает, что когда вы вызываете 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 , чтобыупростить создание тестовых данных.

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