rspec-тестирование ajax-ответа (должно быть частично) - PullRequest
8 голосов
/ 15 апреля 2011

Я хочу проверить, что мое действие контроллера выполняет частичное рендеринг.

Я ковырялся и не могу найти ничего, что работает.

создать действие:

def create
  @project = Project.new...
  respond_to do |format|
    if @project.save
      format.js { render :partial => "projects/form" }
    end
  end
end

спецификация:

it "should save and render partial" do
  ....
  #I expected/hoped this would work
  response.should render_partial("projects/form")
  #or even hopefully
  response.should render_template("projects/form")
  #no dice
end

Ответы [ 3 ]

48 голосов
/ 10 июня 2011

Если вы ищете РЕАЛЬНЫЙ ответ ... (т.е. полностью в RSpec и не используете Capybara), в документации RSpec говорится, что render_template является оберткой для assert_template. assert_template ( в соответствии с документами ) также указывает на то, что вы можете проверить, что частичное было отрисовано, включив: частичный ключ.

Дай мне попробовать ...

it { should render_template(:partial => '_partialname') }
2 голосов
/ 15 апреля 2011

Обновление см. Ответ bluefish ниже, похоже, это правильный ответ

Не могли бы вы рассмотреть вопрос об использовании Капибара для интеграционного тестирования?Я обнаружил, что ajax трудно проверить с помощью одного rspec.В твоем случае я даже не уверен, что ты получил ответ.В capybara он ожидает завершения вызова ajax, и вы можете вызвать page.has_xxxx, чтобы узнать, был ли он обновлен.Вот пример:

it "should flash a successful message" do
    visit edit_gallery_path(@gallery)
    fill_in "gallery_name", :with => "testvalue"
    click_button("Update")
    page.has_selector?("div#flash", :text => "Gallery updated.")
    page.has_content?("Gallery updated")
    click_link "Sign out"
end
1 голос
/ 24 октября 2013

еще один отличный способ проверить ваш метод контроллера ajax - это проверить назначения, которые позже используются для визуализации результата.Вот небольшой пример:

Контроллер

def do_something
  @awesome_result = Awesomeness.generete(params)
end

JBuilder

json.(@awesome_result, :foo, :bar)

Тест контроллера Rspec

describe :do_something do

  before do
    @valid_params{"foo" => "bar"}
  end

  it "should assign awesome result" do
    xhr :post, :do_something, @valid_params
    assigns['awesome_result'].should_not be_nil
  end

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