Javascript使用Jasmine来监视自调用功能
Javascript using Jasmine to spy on self-invoking function
使用这样的javascript结构:
var myClass = function(myArgumentObject) {
var vm = {
myFunction: myFunction,
myVariable: myVariable
}
return vm;
myFunction() {
myVariable = 1 + 1;
myArgumentObject.aMethod();
}
} (myArgumentObject);
如何(如果有的话)使用Jasmine框架来监视(即模拟)myArgumentObject,以便对myFunction进行单元测试?
这样做:
it('test myFunction', function () {
myClass.myFunction();
expect(myClass.myVariable).toEqual(2);
});
失败,因为它尝试调用 myArgumentObject 上的方法时出错。我知道我可以用jasmine.createSpy创建一个假版本的myArgumentObject,但我看不到你是如何传递它的。
好问题! 测试是关键。
您可以在测试中定义参数/输入:
it ('test myClass function', function() {
myArgumentObject = function() {
this.aMethod: jasmine.createSpy();
};
// mock out initial values for your other variables here, eg myVariable
spyOn(vm, 'myFunction').andCallThrough();
myClass(myArgumentObject)
expect(myArgumentObject.aMethod).toHaveBeenCalled()
expect(vm.myVariable).toEqual(2)
});
要记住的几件事 - 您的"返回 vm"语句将提前切断您的函数 - 您将不需要它。
您应该尽早定义变量,以免出现错误。 考虑将 myFunction 移到 'vm' 对象上方。
所以我假设以下内容,你有一个名为 myArgumentObject
的全局变量,它有函数aMethod
。然后你可以像这样使用茉莉花监视这个功能。
it('test myFunction', function () {
spyOn(myArgumentObject, 'aMethod')
myClass.myFunction();
expect(myClass.myVariable).toEqual(2);
});
但是如果没有全局变量,则无法对此进行测试,因为undefined
被传递给测试并且它将始终失败,因为您无法更改函数范围内的私有变量。
相关文章:
- 为什么ng控制器不调用或工作或功能不工作
- 剑道UI移动版 - 按钮点击时调用功能时出现问题
- 一次又一次地调用功能
- 自动完成jQueryUI双调用功能,然后选择并按回车键
- 如果悬停:动画完成后重新调用功能
- Javascript使用Jasmine来监视自调用功能
- 复选框选中功能,用于单个页面中的两组复选框,不能单独调用功能
- Jquery调用功能(在更新面板内)不流畅
- 自调用功能+闭合,改善垃圾回收挂起
- 我该如何摆脱这种自我调用功能
- 我们可以将自调用功能模块分配给变量吗
- Jquery移动页面更改后调用功能
- 确定文件调用功能的目录级别
- 如何确认和调用功能与点击
- 显示控制器每次时间视图上的调用功能
- 同一视图下的骨干视图调用功能
- 按钮不调用功能
- 我可以调用功能时,按钮禁用和修改设置启用在检查元素的CSS样式在FF或Chrome
- 当所有图像都被点击时,调用功能
- 火狐扩展 - 文本突出显示时的调用功能