Как проверить запрос ajax POST с RSpec?
Я просто хочу проверить запрос ajax на спецификацию контроллера. Код продукта приведен ниже. Я использую Devise для аутентификации.
class NotesController < ApplicationController
def create
if request.xhr?
@note = Note.new(params[:note])
if @note.save
render json: { notice: "success" }
end
end
end
end
И спецификация ниже.
describe NotesController do
before do
user = FactoryGirl.create(:user)
user.confirm!
sign_in user
end
it "has a 200 status code" do
xhr :post, :create, note: { title: "foo", body: "bar" }, format: :json
response.code.should == "200"
end
end
Я ожидаю, что код ответа будет 200, но он возвращает 401. Я предполагаю, что это должно быть потому, что запрос, который генерирует rspec, не имеет аутентификации_token или чего-то еще. Как я могу его заглушить?
Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
Отвечая на мой вопрос. Я обнаружил, что format: :json
ошибочно. Просто удалите его, и он работает. Как показано ниже:
it "has a 200 status code" do
xhr :post, :create, note: { title: "foo", body: "bar" }
response.code.should == "200"
end
Прошу прощения за всю суету.
Ответ 2
Я переместил формат:: json в hash параметра и он отлично работает, отвечая json.
describe NotesController do
before do
user = FactoryGirl.create(:user)
user.confirm!
sign_in user
end
it "has a 200 status code" do
xhr :post, :create, { note: { title: "foo", body: "bar" }, format: :json }
response.code.should == "200"
end
end
Ответ 3
Вероятно, вы встретили ошибку CSRF, попробуйте отключить проверку CSRF для вызовов ajax, что-то вроде
# In your application_controller.rb
def verified_request?
if request.xhr?
true
else
super()
end
end