我想知道使用 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 方法?
对于关注点分离来说,这是最好的方法吗?
提前致谢
最佳答案
最好的方法是将叠加层的实例注入(inject)到对话框的构造函数中。
function Dialog (overlay) {
this.overlay = overlay:
}
Dialog.prototype.show() {
this.overlay.show();
}
在您的测试中,您可以简单地注入(inject)一个 spy 。
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();
关于javascript - Jasmine + 测试外部依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15173577/