Jasmine +测试外部依赖

Jasmine + test external dependency

本文关键字:依赖 外部 测试 Jasmine      更新时间:2023-09-26

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

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

function Overlay () {
}
Overlay.prototype.show = function () {
}
Overlay.prototype.hide = function () {
}

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

然后我有另一个模块对话框,使用覆盖模块:

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

我有Jasmine测试,测试除了覆盖之外的所有对话框。假设覆盖单元测试已经设置并通过,对话框测试是否只需要确保var overlay被定义并且它的show方法已经被调用?

对于关注点分离,这是最好的方法吗?

Thanks in advance

最好的方法是将你的overlay实例注入到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();