Rails 5 Capybara没有创建已点击按钮

时间:2017-06-24 22:36:26

标签: capybara ruby-on-rails-5

我有以下测试:

$this->validate(request(),[
        'nombre' => 'required|min:5',
        'precio' => 'required|numeric',
        'descripcion' => 'required|min:10',
        'alto' => 'required|numeric',
        'ancho' => 'required|numeric',
        'largo' => 'required|numeric',
        'categoria' => 'required|numeric',
        'picture' => 'image|required',
    ]);

    $store = new articulo();
    $store->nombre = request('nombre');
    $store->categoria_id = request('categoria');
    $store->precio = request('precio');
    $store->descripcion = request('descripcion');
    $store->alto = request('alto');
    $store->ancho = request('ancho');
    $store->largo = request('largo');
    $store->image = request('picture');

    $store->save();

它基本上是一个带有ajax的按钮,当返回状态为200时显示成功模态。但是,当第二个ajax发生时,由于我无法理解的原因,模态没有显示出来。我可以在开发环境中正常执行此操作。 谢谢你的帮助!

编辑#1

我添加了 it 'shows the current quantity of items inside cart' do item = create(:item) visit root_path click_link("add-item-#{item.id}") wait_for_ajax page.find('#notice-modal-ok').click click_link("add-item-#{item.id}") wait_for_ajax page.find('#notice-modal-ok').click expect(page).to have_selector('#cart-item-count', text: '2') end 来尝试调试它。最终的代码看起来像这样:

save_and_open_screenshot

Imgur Imagem编号1

如图所示,模态在第二次调用时没有显示。这是javascript显示它:

  it 'shows the current quantity of items inside cart' do
    item = create(:item)
    visit root_path
    click_link("add-item-#{item.id}")
    page.find('#notice-modal-ok', wait: 10).click
    expect(page).not_to have_selector('#notice-modal-ok')
    click_link("add-item-#{item.id}")
    save_and_open_screenshot # image
    page.find('#notice-modal-ok', wait: 10).click # this fails
    expect(page).to have_selector('#cart-item-count', text: '2', wait: 10)
  end

在开发模式下,它正常工作。希望这个新的信息有所帮助!

1 个答案:

答案 0 :(得分:1)

首先,如果id为'notice-modal-ok'的元素仅在ajax请求完成后出现,则不需要wait_for_ajax。除此之外,假设单击模态不会影响添加项链接的行为,则有一些可能性。一个是在链接点击发生之前模态实际上没有消失并且抑制了链接行为。另一个原因是`Capybara.default_max_wait_time'没有设置得足够高,无法运行您正在运行的硬件。要测试这些,您可以在第二次单击链接之前等待模态消失,并暂时增加最长等待时间

更新:问题的根本原因是semantic-ui认为模式仍处于活动状态(即使已关闭),如果单击“确定”按钮关闭它在它完全动画到位之前。在测试中解决这个问题的方法是在单击ok按钮之前确保模态具有“活动”类。另一种解决方案是在测试时禁用semantic-ui中的所有动画(如果有该选项),这也可以加快测试速度。

it 'shows the current quantity of items inside cart' do
  item = create(:item)
  visit root_path
  click_link("add-item-#{item.id}")
  page.find('#notice-modal.active #notice-modal-ok').click
  expect(page).not_to have_selector('#notice-modal') #verify/wait for the modal to disappear
  click_link("add-item-#{item.id}")
  page.find('#notice-modal.active #notice-modal-ok').click
  expect(page).to have_selector('#cart-item-count', text: '2')
end