Jasmin测试是否调用callback参数

时间:2016-02-16 13:46:08

标签: javascript node.js jasmine-node

所以我有一个函数来检查是否更改了校验和,如果是,则调用由参数提供的回调。

var watchFileChange = function watchFileChange(oldChecksum, callback){
  // some code about checking checksum
  if(oldChecksum != newChecksum){
    callback()
  }
}
exports.watchFileChange = watchFileChange;

我的Jasmin规格看起来像这样。

var t = require('../server.js');
describe("watchFileChange", function() {

    spyOn(t.watchFileChange, 'Callback');

    var file_false = {
      'foo.txt': 'd41dcccc8f00b204e9800998ecf8427e'
    }
    var file_true = {
      'foo.txt': 'd41d8cd98f00b204e9800998ecf8427e'
    }

    function Callback() {
      console.log("Callback Called")
    }

    it("Checksum is not right, it should call Callback function", function() {
            watchFileChange(file_false, Callback);
            expect(Callback).toHaveBeenCalled();
    });

  });

但它并没有那样工作,因为我没有定义Callback。所以我的问题是有没有办法检查是否调用了by参数提供的回调?

1 个答案:

答案 0 :(得分:1)

您可以创建一个假对象,您可以在其中定义回调函数,然后将其作为参数传递

var init = {
  callback: function() {
    console.log("Callback Called")
  }
};

describe("watchFileChange", function() {
  beforeEach(function() {
    spyOn(init, 'callback');
  });

  //...  

  it("Checksum is not right, it should call Callback function", function() {
     watchFileChange(file_false, init.callback);
     expect(init.callback).toHaveBeenCalled();
  });
});