Я пытался заставить код в исходном посте работать, но безуспешно. Вместо этого я заставил это работать как это (заставил это терпеть неудачу, затем передать). Это проверяет правильность перенаправления, а также правильное флэш-сообщение.
ТЕСТ: authentication_pages_spec.rb
describe "as admin user" do
let(:admin) { FactoryGirl.create(:admin) }
before { sign_in admin }
describe "can't delete self by submitting DELETE request to Users#destroy" do
before { delete user_path(admin) }
specify { response.should redirect_to(users_path),
flash[:error].should =~ /Can not delete own admin account!/i }
end
end
ОСУЩЕСТВЛЕНИЕ: Пользователи # уничтожить
def destroy
user = User.find(params[:id])
if (current_user == user) && (current_user.admin?)
flash[:error] = "Can not delete own admin account!"
else
user.destroy
flash[:success] = "User destroyed."
end
redirect_to users_path
end
Возможно, причина в том, что оригинальный тест не работал, в том, как мы выдаем запрос?
Я попытался добавить каждый из следующих элементов по отдельности в блок описания, но все не получилось:
it { should have_selector('div.alert.alert-error', text: 'delete own admin') }
it { should have_selector('title', text: 'All users') }
it { should have_selector('h1', text: 'All users') }
Итак, похоже, что Capybara на самом деле не перенаправляет на страницу для проверки этих селекторов. Я пробовал «title» и «h1», думая, что, возможно, возникла какая-то проблема с селектором «div.alert.alert-error» ... но «title» и «h1» потерпели неудачу с тем же «ожидаемым CSS, чтобы вернуть что-то» ...
Кто-нибудь знает больше о том, как работают specify { response.should ... }
тесты стиля? Если они не следуют перенаправлениям, когда они нажимают на действие контроллера?