Я пытаюсь проверить, что ссылка на действие destroy выдает собственный браузер confirm
с правильным сообщением.
Ссылка создается с использованием рельсов link_to
:
link_to 'Delete', user_path, method: :delete, data: { confirm: "Are you sure?" }
И генерирует следующий html:
<a data-confirm="Are you sure?" data-method="delete" href="/users/6" rel="nofollow">Delete</a>
Функциональность работает правильно в браузере, но я хочу проверить ее в спецификации rspec
.
Я пытаюсь отключить функцию браузера confirm
, как описано здесь, и в этот смысл, однако я не могу заставить его работать.
it 'requests confirmation', js: true do
visit user_path(user)
page.execute_script "
window.confirmMsg = null;
window.confirm = function(msg) { window.confirmMsg = msg; return true; };"
click_link 'Delete'
expect(page.evaluate_script('window.confirmMsg')).to eq('Are you sure?')
end
Выдает следующую ошибку из rspec
:
Failure/Error: expect(page.evaluate_script('window.confirmMsg')).to eq('Are you sure?')
expected: "Are you sure?"
got: nil
(compared using ==)
Однако, если я вызываю confirm
непосредственно через page.execute_script
:
it 'requests confirmation', js: true do
visit user_path(user)
page.execute_script "
window.confirmMsg = null;
window.confirm = function(msg) { window.confirmMsg = msg; return true; };
window.confirm('Are you sure?');"
expect(page.evaluate_script('window.confirmMsg')).to eq('Are you sure?')
end
Затем тест проходит.
Также нажатие ссылки "Удалить" приведет к сбою теста, даже если confirm
был вызван непосредственно для page.execute_script
:
it 'requests confirmation', js: true do
visit user_path(user)
page.execute_script "
window.confirmMsg = null;
window.confirm = function(msg) { window.confirmMsg = msg; return true; };
window.confirm('Are you sure?');"
click_link 'Delete'
expect(page.evaluate_script('window.confirmMsg')).to eq('Are you sure?')
end
Дает ту же ошибку из rspec
:
Failure/Error: expect(page.evaluate_script('window.confirmMsg')).to eq('Are you sure?')
expected: "Are you sure?"
got: nil
(compared using ==)
Почему тест не работает? И как я могу правильно проверить диалоги подтверждения?
Контекст:
Я запускаю свои тесты с виртуальной машины Vagrant, которая Ubuntu 12.04.4 LTS
и работает ruby 2.1.2p95
.
My Gemfile.lock
показывает, что у меня есть следующие версии:
rails (4.1.4)
poltergeist (1.5.1)
capybara (2.4.1)