我正在为Angular JS项目编写我的第一个单元测试,我想知道如何以易于理解和维护的方式处理事情。
对于指令,例如我到目前为止找到的示例通常有一个指令文件,其中有一个describe()。在我看来,这很容易成为维护的重要文件。
我认为每个指令有一个文件更有意义,然后在该指令中有一个指令本身的描述,就像myDate指令一样,文件名为“myDateDirectiveSpec.js”。这已经让事情变得更容易阅读,但是我仍然有点担心有很多功能的指令。在下面的例子中,我添加注释以指示我在哪里测试哪个函数,但是没有更好的方法吗?
describe("myDate", function() {
var $compile, $rootScope;
var validDate, invalidDate, invalidDateFormat;
beforeEach(angular.mock.module('main'));
beforeEach(inject(
['$compile','$rootScope', function($c, $r) {
$compile = $c;
$rootScope = $r;
}]
));
// test function validDate
it("should check if the given date is a valid date", function() {
validDate = '31-8-2011';
expect(isValidDate(validDate)).toBe(true);
})
// test function formatDate
it("format the given date", function() {
validDate = '31-8-2011';
expect(formatDate(validDate)).toBe('31/8/2011');
})
// test function anotherFunction
it("....", function() {
validDate = '31-8-2011';
expect(anotherFunction(validDate)).toBe(true);
})
// test function anotherFunction
it("....", function() {
validDate = '31-8-2011';
expect(anotherFunction(validDate)).toBe(true);
})
// test function anotherFunction
it("....", function() {
validDate = '31-8-2011';
expect(anotherFunction(validDate)).toBe(true);
})
});
如果一个指令中有很多函数,我可以用一种更聪明的方式将它们拆分出来,然后我在上面的例子中做了什么?
答案 0 :(得分:0)
我不完全确定这适用于测试指令,因为我自己还没有这样做。然而;在测试服务和控制器时,我通常会做的是开始嵌套描述块。
我对Jasmine不太熟悉,或者这可能造成任何潜在的性能问题(这是我计划退出的事情),但如果有人有分享的话请做。
所以我正在做的是这样的事情:
describe("myDate", function() {
var $compile, $rootScope;
var validDate, invalidDate, invalidDateFormat;
beforeEach(angular.mock.module('main'));
beforeEach(inject(
['$compile','$rootScope', function($c, $r) {
$compile = $c;
$rootScope = $r;
}]
describe("validDate", function () {
it("should check if the given date is a valid date", function() {
validDate = '31-8-2011';
expect(isValidDate(validDate)).toBe(true);
});
});
describe("someOtherFunction, function () {
it("does something", function () {
// do something here
});
it("does something else", function () {
// do something else here
});
});
));
和你一样,我更喜欢在每个文件的基础上拆分我的spec文件(我没有'directives.js'文件包含em中的所有指令,它们都是分开的)。我更喜欢保持我的spec文件夹与我的应用程序文件大致相同,这使我更容易保持井井有条。
我个人认为(再次,个人偏好)这种嵌套描述块的方式使得在编写和阅读测试时眼睛更容易。如果它确实有任何性能问题,那么可能会切换到一个描述块 - 以及很多(“”)。