我如何使用 AngularJS 和 Karma 从模拟方法中 return 不同的值?
How can I return different values from a mocked method using AngularJS and Karma?
我正在测试在其内部使用 ServiceB 的 ServiceA。 ServiceB 有一个名为 getData() 的方法,有时它 return 为真,有时它 return 为假。服务 A 根据服务 B return 是真还是假有不同的逻辑,我需要测试这两种情况。目前,我正在像这样模拟服务 B:
beforeEach(angular.mock.module('app', function ($provide) {
serviceB = {
getData: function () {
return true;
}
};
$provide.value('serviceB', serviceB);
}));
那么我如何测试当 serviceB return 为真时会发生什么,然后再进行另一个测试以验证它在 return 为假时的行为?我可以在 it() 方法中而不是在 beforeEach() 中创建模拟,以便我可以在不同的测试方法中使用模拟 return 不同的值吗?
在你的个人测试中模拟它:
beforeEach(...)
it('test with true', inject(function (serviceB) {
spyOn(seviceB, 'getData').and.callFake(function(){
return true;
});
//... other test code
expect(serviceB.getData).toHaveBeenCalled();
}));
it('test with false', inject(function (serviceB) {
spyOn(seviceB, 'getData').and.callFake(function(){
return false;
});
//... other test code
expect(serviceB.getData).toHaveBeenCalled();
}));
我正在测试在其内部使用 ServiceB 的 ServiceA。 ServiceB 有一个名为 getData() 的方法,有时它 return 为真,有时它 return 为假。服务 A 根据服务 B return 是真还是假有不同的逻辑,我需要测试这两种情况。目前,我正在像这样模拟服务 B:
beforeEach(angular.mock.module('app', function ($provide) {
serviceB = {
getData: function () {
return true;
}
};
$provide.value('serviceB', serviceB);
}));
那么我如何测试当 serviceB return 为真时会发生什么,然后再进行另一个测试以验证它在 return 为假时的行为?我可以在 it() 方法中而不是在 beforeEach() 中创建模拟,以便我可以在不同的测试方法中使用模拟 return 不同的值吗?
在你的个人测试中模拟它:
beforeEach(...)
it('test with true', inject(function (serviceB) {
spyOn(seviceB, 'getData').and.callFake(function(){
return true;
});
//... other test code
expect(serviceB.getData).toHaveBeenCalled();
}));
it('test with false', inject(function (serviceB) {
spyOn(seviceB, 'getData').and.callFake(function(){
return false;
});
//... other test code
expect(serviceB.getData).toHaveBeenCalled();
}));