加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何测试rails 4确认对话与Capybara和Polterge

发布时间:2020-12-16 21:45:32 所属栏目:百科 来源:网络整理
导读:我试图测试一个链接到一个破坏动作引发一个本地浏览器确认框与正确的消息. 链接正在使用rails’link_to: link_to 'Delete',user_path,method: :delete,data: { confirm: "Are you sure?" } 并生成以下html: a data-confirm="Are you sure?" data-method="d
我试图测试一个链接到一个破坏动作引发一个本地浏览器确认框与正确的消息.

链接正在使用rails’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功能规范中进行测试.

我试图清除浏览器的确认功能,如here和this gist所述,但是我无法使其工作.

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 ==)

但是,如果我直接通过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

然后测试通过.

同时单击删除链接将导致测试失败,即使直接为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.

我的Gemfile.lock显示我有以下版本:

rails (4.1.4)
poltergeist (1.5.1)
capybara (2.4.1)

解决方法

page.driver.browser.accept_js_confirmed已被弃用.而是使用
page.accept_confirm do
  click_link 'Delete'
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读