Jasmine +测试外部依赖

时间:2013-03-02 10:47:16

标签: javascript unit-testing jasmine

我想知道使用jasmine测试外部依赖关系的最佳方法。

例如,我有一个纯粹显示和隐藏背景蒙版的叠加模块:

function Overlay () {

}

Overlay.prototype.show = function () {

}

Overlay.prototype.hide = function () {

}

这已经完成了完整的Jasmine单元测试。

然后我有另一个使用覆盖模块的模块Dialog:

function Dialog () {

}

Dialog.prototype.show() {
 //do dialog stuff here, then show overlay
 var overlay = new Overlay();
 overlay.show();
}

我有Jasmine测试,测试除叠加层之外的所有对话框。假设叠加单元测试已设置并且通过,对话测试只需要确保定义了var叠加并且已调用其show方法吗?

为了解决问题,这是最好的方法吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

最好的方法是将覆盖的实例注入Dialog的构造函数。

function Dialog (overlay) {
  this.overlay = overlay:
}

Dialog.prototype.show() {
 this.overlay.show();
}

在你的测试中,你可以简单地注射一个间谍。

var overlay = {show: jasmine.createSpy()};
var dialog = new Dialog(overlay);
dialog.show();
expect(overlay.show). toHaveBeenCalled();

另一种方法是监视全局Overlay函数并在show函数上返回带有间谍的对象。

var overlay = {show: jasmine.createSpy()};
jasmine.spyOn(Overlay, 'show').andReturn(overlay);
var dialog = new Dialog(overlay);
dialog.show();
expect(overlay.show). toHaveBeenCalled();