Jasmine spyOn 函数和返回的对象
Jasmine spyOn on function and returned object
我将 MeteorJS 与 angular 一起使用,想测试控制器。我的控制器使用 $reactive(this).attach($scope)。我需要检查是否调用了此方法。
我为间谍创造了类似的东西:
var $reactive = function(ctrl) {
return {
attach:function(scope) {}
}
};
所以我可以这样称呼它:
$reactive('aaa').attach('bbb');
我如何在测试中做到这一点?
spyOn($reactive, 'attach');
无效。我收到 错误:attach() 方法不存在
以及如何检查它是否被调用了?
这个电话好吗?
expect($reactive).toHaveBeenCalledWith(controller);
以及如何检查是否使用 args(作用域)调用了附加函数?
您需要模拟 $reactive
组件。将其替换为测试范围内 returns 和 spyObj
的间谍。然后触发使 $reactive
方法变为 运行 的方法并进行测试。
var reactiveResult = jasmine.createSpyObj('reactiveResult', ['attach']);
var $reactive = jasmine.createSpy('$reactive').and.returnValue(reactiveResult);
var controller = {};
beforeEach(function () {
module(function ($provide) {
$provide.factory('$reactive', $reactive);
});
module('yourAppModule');
});
it('Should call attach', function () {
$reactive(controller).attach();
expect($reactive).toHaveBeenCalledWith(controller);
expect(reactiveResult.attach).toHaveBeenCalled();
}) ;
您也可以向控制器依赖项提供 $reactive
间谍:
var reactiveResult = jasmine.createSpyObj('reactiveResult', ['attach']);
var $reactive = jasmine.createSpy('$reactive').and.returnValue(reactiveResult);
var ctrl;
beforeEach(inject(function ($controller) {
ctrl = $controller('YourController', {$reactive: $reactive });
}));
it('Should call attach', function () {
//ctrl.triggerThe$reactiveCall
expect($reactive).toHaveBeenCalledWith(ctrl);
expect(reactiveResult.attach).toHaveBeenCalled();
}) ;
我将 MeteorJS 与 angular 一起使用,想测试控制器。我的控制器使用 $reactive(this).attach($scope)。我需要检查是否调用了此方法。
我为间谍创造了类似的东西:
var $reactive = function(ctrl) {
return {
attach:function(scope) {}
}
};
所以我可以这样称呼它:
$reactive('aaa').attach('bbb');
我如何在测试中做到这一点?
spyOn($reactive, 'attach');
无效。我收到 错误:attach() 方法不存在
以及如何检查它是否被调用了? 这个电话好吗?
expect($reactive).toHaveBeenCalledWith(controller);
以及如何检查是否使用 args(作用域)调用了附加函数?
您需要模拟 $reactive
组件。将其替换为测试范围内 returns 和 spyObj
的间谍。然后触发使 $reactive
方法变为 运行 的方法并进行测试。
var reactiveResult = jasmine.createSpyObj('reactiveResult', ['attach']);
var $reactive = jasmine.createSpy('$reactive').and.returnValue(reactiveResult);
var controller = {};
beforeEach(function () {
module(function ($provide) {
$provide.factory('$reactive', $reactive);
});
module('yourAppModule');
});
it('Should call attach', function () {
$reactive(controller).attach();
expect($reactive).toHaveBeenCalledWith(controller);
expect(reactiveResult.attach).toHaveBeenCalled();
}) ;
您也可以向控制器依赖项提供 $reactive
间谍:
var reactiveResult = jasmine.createSpyObj('reactiveResult', ['attach']);
var $reactive = jasmine.createSpy('$reactive').and.returnValue(reactiveResult);
var ctrl;
beforeEach(inject(function ($controller) {
ctrl = $controller('YourController', {$reactive: $reactive });
}));
it('Should call attach', function () {
//ctrl.triggerThe$reactiveCall
expect($reactive).toHaveBeenCalledWith(ctrl);
expect(reactiveResult.attach).toHaveBeenCalled();
}) ;