Проверка контроллера 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, чтобы он проходил, но это похоже на взлом.
Спасибо
Ответы
Ответ 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