Rails 3.1, RSpec - сбой, но страница загружается нормально - PullRequest
1 голос
/ 05 октября 2011

Я пишу некоторые спецификации, и следующее не удается, но страница / menus / 1 загружается нормально в браузере.Это порт приложения php, и я впервые использую RSpec.Любые мысли о том, почему он может не работать.

Ошибка:

1) MenusController GET 'show' should be succesful
  Failure/Error: get :show, :id => 1
  ActiveRecord::RecordNotFound:
  Couldn't find MenuHeader with id=1
  # ./app/controllers/menus_controller.rb:18:in `show'
  # ./spec/controllers/menus_controller_spec.rb:7:in `block (3 levels) in <top (required)>'

, но этот конкретный MenuHeader существует на основе всех нормальных критериев (console, mysql, browser).Я на 99% уверен, что у меня есть ошибка в моей спецификации:

require 'spec_helper'

describe MenusController do
  describe "GET 'show'" do
     it "should be succesful" do
       get :show, :id => 1
       response.should be_success
     end
  end
end

вот menus_controller.rb

def show
  @menu_header_data=MenuHeader.find(params[:id])


  respond_to do |format|
    format.html # show.html.erb
    # format.json { render json: @menu } to do
  end
end

thx

1 Ответ

4 голосов
/ 05 октября 2011

При тестировании контроллера с помощью Rspec или TestUnit я бы использовал Factory или Fixture для передачи идентификатора, а не для настройки тестовой базы данных с данными.Лучше протестировать что-то вроде:

Используя FactoryGirl (Моя рекомендация, но у каждого свой вкус):

describe MenusController do
  describe "GET 'show'" do
     it "should be succesful" do
       get :show, :id => Factory(:menu).id
       response.should be_success
     end
  end
end

Тест в основном только для того, чтобы убедиться, чтоКонтроллер правильно реагирует, когда предоставляет достоверные данные, а использование Фабрики или Приспособления намного менее хрупко.Поддерживать ваш набор тестов будет непросто, если он основан на жестких данных, таких как фикстуры или резервное копирование базы данных, и в конечном итоге это может привести к тому, что вам придется отказаться от разработки через тестирование, а не принять ее.

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