spyon 不能在非 angularjs 环境中使用嵌套函数
spyon doesn't work with nested function in a non angularjs environment
我在监视从我的 javascript 模块中的另一个函数调用的函数时遇到问题(无 angularJS)
这是 javascript 模块:
var Utils = function () {
function getFunction1(value1) {
var value2 = getFunction2();
return value1 + value2;
};
function getFunction2() {
return 10;
};
return {
getFunction1: getFunction1,
getFunction2: getFunction2
};
};
我的测试是:
describe('test spyon', function () {
var myApp = new Utils();
it('test spyOn', function () {
spyOn(myApp, 'getFunction2').and.returnValue(2);
// call a function under test and assert
expect(myApp.getFunction1(1)).toBe(3);
});
});
我运行命令:
gradle build karma
结果是:
PhantomJS 1.9.8 (Windows 7 0.0.0) test spyon test spyOn FAILED
Expected 11 to be 3.
Error: Expected 11 to be 3.
at X:/projects/ETRANS-CALCULATOR/branches/ONS128-ONS129-LifeIPCalculators/Common/src/test/webapp/unit/utilsSpec.js:30
at X:/projects/ETRANS-CALCULATOR/branches/ONS128-ONS129-LifeIPCalculators/Common/node_modules/karma-jasmine/lib/boot.js:126
at X:/projects/ETRANS-CALCULATOR/branches/ONS128-ONS129-LifeIPCalculators/Common/node_modules/karma-jasmine/lib/adapter.js:171
at http://localhost:9876/karma.js:182
at http://localhost:9876/context.html:67
PhantomJS 1.9.8 (Windows 7 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.946 secs / 0.002 secs)
:Common:karma FAILED
如果我在 AngularJS 控制器中进行相同的测试,它将使用 $scope 而不是 myApp
有什么帮助吗?
getFunction1
中引用的 getFunction2
是作用域函数 getFunction2
,而不是 myApp 的 getFunction2
实例。不过间谍正在监视实例的 getFunction2
。
要解决此问题,您应该在 getFunction1
中使用 this.getFunction2
而不是 getFunction2
。
即
function getFunction1(value1) {
var value2 = this.getFunction2();
return value1 + value2;
};
我在监视从我的 javascript 模块中的另一个函数调用的函数时遇到问题(无 angularJS)
这是 javascript 模块:
var Utils = function () {
function getFunction1(value1) {
var value2 = getFunction2();
return value1 + value2;
};
function getFunction2() {
return 10;
};
return {
getFunction1: getFunction1,
getFunction2: getFunction2
};
};
我的测试是:
describe('test spyon', function () {
var myApp = new Utils();
it('test spyOn', function () {
spyOn(myApp, 'getFunction2').and.returnValue(2);
// call a function under test and assert
expect(myApp.getFunction1(1)).toBe(3);
});
});
我运行命令:
gradle build karma
结果是:
PhantomJS 1.9.8 (Windows 7 0.0.0) test spyon test spyOn FAILED
Expected 11 to be 3.
Error: Expected 11 to be 3.
at X:/projects/ETRANS-CALCULATOR/branches/ONS128-ONS129-LifeIPCalculators/Common/src/test/webapp/unit/utilsSpec.js:30
at X:/projects/ETRANS-CALCULATOR/branches/ONS128-ONS129-LifeIPCalculators/Common/node_modules/karma-jasmine/lib/boot.js:126
at X:/projects/ETRANS-CALCULATOR/branches/ONS128-ONS129-LifeIPCalculators/Common/node_modules/karma-jasmine/lib/adapter.js:171
at http://localhost:9876/karma.js:182
at http://localhost:9876/context.html:67
PhantomJS 1.9.8 (Windows 7 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.946 secs / 0.002 secs)
:Common:karma FAILED
如果我在 AngularJS 控制器中进行相同的测试,它将使用 $scope 而不是 myApp
有什么帮助吗?
getFunction1
中引用的 getFunction2
是作用域函数 getFunction2
,而不是 myApp 的 getFunction2
实例。不过间谍正在监视实例的 getFunction2
。
要解决此问题,您应该在 getFunction1
中使用 this.getFunction2
而不是 getFunction2
。
即
function getFunction1(value1) {
var value2 = this.getFunction2();
return value1 + value2;
};