gpt4 book ai didi

unit-testing - 如何为 AngularJS 模型编写单元测试

转载 作者:行者123 更新时间:2023-12-04 02:52:38 25 4
gpt4 key购买 nike

我有一个基本模型,我正在尝试为其编写一个简单的单元测试套件,但我显然遗漏了一些东西......

模型的代码如下所示:

angular.module('AboutModel', [])
.factory(
'AboutModel',
[
function () {
var paragraphs = [];
var AboutModel = {
setParagraphs: function (newParagraphs) {
paragraphs = newParagraphs;
},
getParagraphs: function () {
return paragraphs;
}
};

return AboutModel;
}
]
);

要求很简单:为名为 paragraphs 的私有(private)数组提供 getter 和 setter 方法。

这是我所获得的测试套件代码:

describe('Testing AboutModel:', function () {
describe('paragraphs setter', function () {
beforeEach(module('AboutModel'));
it('sets correct value', inject(function (model) {
// STUCK HERE
// don't know how to access the model, or the setParagraphs() method
}));
});
describe('paragraphs getter', function () {
// not implemented yet
});
});

我已经在网络上进行了大量的谷歌研究,但到目前为止没有任何乐趣。

解决方案必须简单;请帮忙!

甚至可能存在实现该模型的更好方法……欢迎提出改进建议。

对于任何感兴趣的人,完整的源代码在这里: https://github.com/mcalthrop/profiles/tree/imp/angular

提前致谢

马特

最佳答案

您需要在测试中运行 beforeEach 以注入(inject)模型实例,然后将其分配给一个变量,然后您可以在整个测试中重复使用该变量。

var AboutModel;

beforeEach(inject(function (_AboutModel_) {
AboutModel = _AboutModel_;
}));

然后您可以像这样访问您的 getter:

AboutModel.getParagraphs();

我稍微调整了您的原始模型,因为我觉得它读起来好一点(我的偏好):

'use strict';

angular.module('anExampleApp')
.factory('AboutModel', function () {
var _paragraphs;

// Public API here
return {
setParagraphs: function (newParagraphs) {
_paragraphs = newParagraphs;
},
getParagraphs: function () {
return _paragraphs;
}
};
});

然后为了测试,我将结合使用标准 Jasmine 测试和 spies :

'use strict';

describe('Service: AboutModel', function () {

beforeEach(module('anExampleApp'));

var AboutModel, paragraphs = ['foo', 'bar'];

beforeEach(inject(function (_AboutModel_) {
AboutModel = _AboutModel_;
}));

it('should set new paragraphs array', function () {
AboutModel.setParagraphs([]);
expect(AboutModel.getParagraphs()).toBeDefined();
});

it('should call setter for paragraphs', function () {
spyOn(AboutModel, 'setParagraphs');
AboutModel.setParagraphs(paragraphs);
expect(AboutModel.setParagraphs).toHaveBeenCalledWith(paragraphs);
});

it('should get 2 new paragraphs', function () {
AboutModel.setParagraphs(['foo', 'bar']);
expect(AboutModel.getParagraphs().length).toEqual(2);
});

});

关于unit-testing - 如何为 AngularJS 模型编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17341977/

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