У меня есть пользовательский контроллер, который при отправке запроса PATCH будет пытаться аутентифицировать пользователя и обновлять пароль пользователя.Все работает в браузере (я получаю 200, когда «current_password» верен, и 401, когда оно неверно).
Но когда я пытаюсь запустить спецификации, expect(response.status).to eq(401)
всегда терпит неудачу, потому что я всегда получаю 200В качестве ответа кто-нибудь может объяснить, что здесь происходит?
users_controller.rb:
def update
if params[:user].has_key?("current_password") && !(@user.authenticate(params[:user][:current_password]))
render_response(:not_authorized, { description_detailed: "Unable to authenticate current password" })
else
@user.update_attributes!(accessible_params)
render_response(:ok, { data: UserSerializer.new(@user, root: false)})
end
end
users_controller_spec.rb:
context "when current password field is passed in" do
let(:name) { Faker::HarryPotter.character.split(' ') }
let!(:custom_user) do
create(:user,
first_name: name[0],
last_name: name[0],
email: "test@reset.com",
password: "correct123"
)
end
context "when current password is correct" do
before :example do
patch :update, params: { id: custom_user.id, user: user_params }
end
let(:user_params) do
{ current_password: "correct123", password: "newpassword123" }
end
it "updates user's password with new password" do
expect(custom_user.authenticate('correct123')).to eq(custom_user)
expect(response.status).to eq(200)
end
end
context "when current password is incorrect" do
let(:user_params) do
{ user: {
current_password: "incorrect1235",
password: "newpassword123"
}}
end
before :example do
patch :update, params: { id: custom_user.id, user: user_params }
end
it "does not update user's password" do
expect(custom_user.authenticate('incorrect1234')).not_to eq(custom_user)
expect(response.status).to eq(401)
end
end
end