gpt4 book ai didi

javascript - AngularJS 模拟 - 使用 jasmine 进行单元测试的相同服务、不同功能

转载 作者:行者123 更新时间:2023-11-28 07:14:22 26 4
gpt4 key购买 nike

我正在尝试测试一个服务A,这个服务有一些功能:

应用程序代码:

angular.module('app').factory('ServiceA', function() {
var ServiceA = {
_retryItem: null,

retryItem: function(type, data) {
ServiceA._retryItem = {
type: type,
data: data
};

return this;
},

clear: function() {
ServiceA._retryItem = null;

return this;
},

start: function(options, retryFn) {
ServiceA.clear();
ServiceA.retryItem('action', {url: '/my-url', options: options, retryFn: retryFn});
}
};

return ServiceA;
});

假设我想测试“start”函数,我有两个选择:

1)调用真正的函数clear和retryItem:

...    

describe('...', function() {
var options, retryFn;

beforeEach(function() {
options = {};
retryFn = function() {};
});

it('...', function() {
ServiceA.start(options, retryFn);

expect(ServiceA._retryItem).toEqual({type: 'action', data: {url: '/my-url', options: options, retryFn: retryFn});

});
});

2)模拟clear和retryItem两个函数:

...    

describe('...', function() {
var options, retryFn;

beforeEach(function() {
options = {};
retryFn = function() {};

spyOn(ServiceA, 'clear');
spyOn(ServiceA, 'retryItem');
});

it('...', function() {
ServiceA.start(options, retryFn);

expect(ServiceA.clear).toHaveBeenCalled();
expect(ServiceA.retryItem).toHaveBeenCalledWith('action', {url: '/my-url', options: options, retryFn: retryFn});
});
});

哪一个是正确的方法?我从单元测试中了解到的内容 - 我的单元是功能“start”,其他所有内容(功能清除和重试项目)我可以模拟并假设我有一个测试并且正在工作,这是正确的吗?

最佳答案

我认为这在一定程度上取决于您想要测试的内容、您的严格程度以及个人喜好。我会选择第二个选项,并在其他单元测试中单独测试其余功能。这样,您就不会多次测试东西,获得某种文档,并且可以确定这些关键函数是通过健全的属性调用的。对我来说,这听起来真的很好! :)

关于javascript - AngularJS 模拟 - 使用 jasmine 进行单元测试的相同服务、不同功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30999457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com