Подтвердить что ты не робот

Проверка контроллера Rspec с помощью Javascript

Как вы тестируете контроллер в Rspec, если контроллер отвечает только на javascript? Например, это будет мой фактический код:

some view.html.erb

link_to 'More Chips', add_chips_path, :remote => true

chips_controller

def add_chips
  Chips.create(:color => :red)
  @chips = Chips.all
end

add_chips.js.erb

$('#chip_count').html('<%=j render("chips/list", :chips => @chips) %>');

Тест Rspec

спецификации/контроллеры/chips_controller_spec

it "should add chips" do 
  post :add_chips, :format => 'js'
end

Когда я пытаюсь опубликовать это с помощью RSpec, я получаю ошибку Missing Template, потому что она отправляет HTML-запрос, но нет представления HTML. Я пробовал прохождение в формате, но это, похоже, не работает. Я знаю, что могу помещать в представление "dummy" html, чтобы он проходил, но это похоже на взлом.

Спасибо

4b9b3361

Ответ 1

Хорошо, я понял, что я делаю неправильно. Я передавал хэши параметров с моим тестом, и формат должен быть включен в один и тот же хеш. поэтому вместо этого:

@params = {:chip_color => 'red'}
...
post :add_chips, @params, :format => 'js'

Это должно выглядеть так:

@params = {:chip_color => 'red', :format => 'js'}
...
post :add_chips, @params

Ответ 2

Если вы пытаетесь выполнить запрос Ajax из спецификации контроллера, вместо выполнения post :add_chips и передачи format в качестве параметра вы должны сделать:

xhr :post, :add_chips, @params

... без format в параметрах. Это сделает запрос JavaScript и ответит шаблоном .js.

Update:

В последних версиях Rails/RSpec вы должны:

post :add_chips, params: @params, xhr: true