使用这样的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版本,但我看不出你是如何传入它的。
答案 0 :(得分:1)
好问题!测试是关键。
您可以在测试中定义参数/输入:
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'对象
答案 1 :(得分:0)
所以我假设以下内容,你有一个名为myArgumentObject
的全局变量,其函数为aMethod
。然后你可以使用像这样的茉莉花来窥探这个功能。
it('test myFunction', function () {
spyOn(myArgumentObject, 'aMethod')
myClass.myFunction();
expect(myClass.myVariable).toEqual(2);
});
但是如果没有gloabl变量你不能测试它,那么因为undefined
被传递给测试并且它总是会失败,因为你不能在函数范围内更改私有变量。