1

我有一个页面通过 wijcombobox 敲除绑定(http://wijmo.com/wiki/index.php/Using_Wijmo_with_Knockout)呈现 wijmo 组合框。由于测试运行和点击事件被绑定之间存在竞争条件,我很难使用 capybara 进行测试。可能还有其他比赛条件,但这是目前让我绊倒的比赛条件。这是我目前的解决方法:

def click_on_combobox_till_options_appear
  wait_until(10) do
    page.find('.wijmo-wijcombobox-trigger').click
    page.has_css?('.wijmo-wijlist-item')
  end
end

我正在使用“kb-inject”来设置我的 ViewModel 绑定。

是否有我可以连接的 javascript 事件或我可以测试的属性以指示applyBindings已完成执行,这样我就可以避免像上面那样的解决方法?

4

1 回答 1

0

在等待applyBindings被调用方面,我们提出了以下解决方法。这不是很好,但应该作为解决类似问题的基础(替换App为有意义的命名空间):

def wait_for_ko_bindings
  js = <<END_JS
$(function() {
  ko.bindingHandlers.isLoadedForTests = {
    init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
      App.ko_bindings_loaded_for_tests = true;
    }
  };
  var viewModel = {};

  var testNode = document.createElement('div');
  testNode.innerHTML = '<div data-bind="isLoadedForTests:1"></div>';
  document.body.appendChild(testNode);
  kb.applyBindings(viewModel, testNode);
});
END_JS
  page.execute_script(js)
  wait_until do
    page.evaluate_script('App.ko_bindings_loaded_for_tests === true')
  end
end

特别是对于 wijcombobox,我们发现以下工作:

def click_combobox
  wait_until(10) do
    page.find('.wijmo-wijcombobox-trigger').click
    page.all('.wijmo-wijlist-item').length > 0
  end
end
于 2012-11-02T18:14:25.223 回答