#ruby-on-rails-3 #rspec #rspec2
#ruby-on-rails-3 #rspec #rspec2
Вопрос:
В моем файле spec_helper.rb я специально установил для него значение config.render_views, но ответ.тело, которое я получаю обратно, по-прежнему пустое. Вот моя базовая спецификация
describe "#index" do
it "should list all rooms" do
get 'index'
stub(Person).all
end
it "responds with 200 response code" do
response.should be_ok
end
it "renders the index template" do
pp response.body
response.should render_template("people/index")
end
end
Есть ли что-нибудь еще, что могло бы привести к такому поведению? Это нормально, когда я захожу в браузер. Я на Rspec 2.5.0
Ответ №1:
Вы пробовали иметь render_views
в вашем файле спецификации контроллера? Это работает для меня.
Еще одна вещь, которую я заметил, это то, что вы обращаетесь к индексной странице только один раз в своих тестовых примерах — первый, если быть точным. Остальное вернет пустое содержимое html, потому что ответа нет.
Вот как я это реализую. Но если у вас уже есть config.render_views
в файле *spec_helper.rb * и это работает, вы можете обойтись без render_views
в спецификации контроллера.
describe MyController
render_views
before :each do
get :index
end
describe "#index" do
it "should list all rooms" do
stub(Person).all
end
it "responds with 200 response code" do
response.should be_ok
end
it "renders the index template" do
pp response.body
response.should render_template("people/index")
end
end
end
Редактировать:
Небольшое изменение здесь — это before
большой объект, в котором я вызываю get :index
для каждого it
блока.
Комментарии:
1. Вы исправили свой код, включив его
get :index
в каждыйit
блок?2. Вам, безусловно, нужно
get :index
в каждом тесте, или лучше, вbefore
, как показал @Yasky. Вашstub
также ничего не делает в тесте, в котором он находится. Заглушение послеget
не будет иметь никакого эффекта. Вы также ничего не возвращаете из заглушки.
Ответ №2:
У меня была такая же проблема.
Решением было указать формат запроса.
Например:
get :some_action, some_param: 12121, format: 'json'
Ответ №3:
Это было изменено с RSpec 1 на RSpec 2. Просмотр спецификаций теперь использует rendered
вместо response
:
rendered.should =~ /some text/
Больше информации в примечаниях к выпуску на github.
Комментарии:
1. Я не в спецификации view, это спецификация контроллера, и в документах все еще показано, что ответ обрабатывается таким образом