1

wijcomboboxノックアウトバインディングを介してwijmoコンボボックスをレンダリングしているページがあります(http://wijmo.com/wiki/index.php/Using_Wijmo_with_Knockout)。実行中のテストとバインドされているクリックイベントの間の競合状態のため、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 に答える