我想知道使用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方法吗?
为了解决问题,这是最好的方法吗?
提前致谢
答案 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();