触发clipboard.js('成功')或on('错误')进行单元测试

时间:2017-12-12 21:41:50

标签: javascript jquery unit-testing jasmine jasmine-jquery

我正在使用Jasmine Jquery进行单元测试。我有以下代码:

(function() {
  $(document).ready(copyToClipboard);

  function copyToClipboard(){
    var clipboard = new Clipboard('#d_clip');

    clipboard.on('success', function(e) {
      $(e.trigger).text("Copied!");
      e.clearSelection();
      setTimeout(function() {
        $(e.trigger).text("Copy");
      }, 2500);
    });

    clipboard.on('error', function(e) {
      $(e.trigger).text("Error copying");
      setTimeout(function() {
        $(e.trigger).text("Copy");
      }, 2500);
    });
  }
})();

我已经尝试过:

  beforeEach(function() {
    setFixtures("<button type='button' id='d_clip'>Copy</button>")
    clipboard = new Clipboard('#d_clip');
  });

  it('should change text to copied', function() {
    spyOn(clipboard,'on');
    $('#d_clip').trigger('click');
    expect($('#d_clip').text()).toEqual('Copied!')
  });

但是我收到了这个错误:

  

预期&#39;复制&#39;等于复制!&#39;。

我手动点击时有效。当我在Chrome Developer Console上$('#d_clip').trigger('click');时,它也可以使用。

看起来剪贴板没有为单元测试做任何事情。我无法弄清楚如何做到这一点。

我想测试什么?

  1. 我想触发点击并确保文字是&#34;已复制!&#34;当成功和&#34;错误复制&#34;何时出错。
  2. 这是在Ruby on Rails上,所以我运行JS单元测试:

    rake jasmine:ci

1 个答案:

答案 0 :(得分:1)

要直接回答您的问题,我会尝试jasmine's done() callback。它允许您的规范是异步的。 (请注意,间谍是不必要的。)

format_suffix_patterns

但是,从样式的角度来看,我建议你将它分成两个较小的规格,一个测试是否从it("should change text to 'copied'", function(done) { $('#d_clip').trigger('click'); clipboard.on('success', function() { expect($('#d_clip').text()).toEqual('Copied!') done(); }); }); 调用触发器,另一个直接调用你的回调(提取它是一个变量)并检查它是否更新了值。结合这两者感觉就像是对我的整合测试。

相关问题