如何在茉莉花单元测试中传递一个空数组?
how to pass an empty array in a unit test with jasmine?
我正在开发一个 angular 项目,我正在测试一个函数,该函数填充一个变量名 'recentSearches',该变量名使用 *ngFor
呈现 table,该函数接收一个名为 'recentSearches' 的变量作为参数,它是一个数组。当添加参数 'recentSearches' 不为空时,我需要在 table 上方显示一个名为“最近”的标签。我在class的开头创建了一个boolean
属性,名称为'recentSearchesHasValue',默认为false
,当函数为运行时,如果'recentSearches' 有我将 'recentSearchesHasValue' 设置为 true 的元素,然后在 HTML 我检查,使用 *ngIf wheter 'recentSearchesHasValue' 是真还是假来显示 'recent' 标签.一切正常。我的问题是单元测试。当 'recentSearches' 是填充对象数组和它为空时,我正在尝试为这两种情况创建单元测试。我写的第一个测试通过了,但是第二个没有通过测试。这是我上面描述的.ts中的函数:
handleRecentSearchesDisplay(recentSearches: RecentSearch[]): void {
if (recentSearches) {
this.recentSearchesHasValue = true;
this.recentSearches = recentSearches;
this.viewRecentSearches = [];
for (const search of recentSearches) {
this.viewRecentSearches.push(this.createRecentSearch(search));
}
if (!this.viewRecentSearches.length) {
this.progressbarVisibility.emit(false);
}
}
}
这是我失败的测试:
describe('handleRecentSearchesDisplay', () => {
let recentSearch: RecentSearch[] = RecentSearchesTestModal;
it('display recent label if recentSearch is not empty', () => {
spyOn(component, 'createRecentSearch');
component.handleRecentSearchesDisplay(recentSearch);
expect(component.recentSearchesHasValue).toBeTrue();
});
it('Do not display recent label if recentSearch is empty', () => {
spyOn(component, 'createRecentSearch');
let recentSearch = [];
component.handleRecentSearchesDisplay(recentSearch);
expect(component.recentSearchesHasValue).toBeFalse();
});
});
感谢您的帮助。谢谢。
我认为您必须将 if 条件更改为:
handleRecentSearchesDisplay(recentSearches: RecentSearch[]): void {
if (recentSearches?.length > 0) { // here you need to test if list is not empty
this.recentSearchesHasValue = true;
this.recentSearches = recentSearches;
this.viewRecentSearches = [];
for (const search of recentSearches) {
this.viewRecentSearches.push(this.createRecentSearch(search));
}
if (!this.viewRecentSearches.length) {
this.progressbarVisibility.emit(false);
}
}
}
我正在开发一个 angular 项目,我正在测试一个函数,该函数填充一个变量名 'recentSearches',该变量名使用 *ngFor
呈现 table,该函数接收一个名为 'recentSearches' 的变量作为参数,它是一个数组。当添加参数 'recentSearches' 不为空时,我需要在 table 上方显示一个名为“最近”的标签。我在class的开头创建了一个boolean
属性,名称为'recentSearchesHasValue',默认为false
,当函数为运行时,如果'recentSearches' 有我将 'recentSearchesHasValue' 设置为 true 的元素,然后在 HTML 我检查,使用 *ngIf wheter 'recentSearchesHasValue' 是真还是假来显示 'recent' 标签.一切正常。我的问题是单元测试。当 'recentSearches' 是填充对象数组和它为空时,我正在尝试为这两种情况创建单元测试。我写的第一个测试通过了,但是第二个没有通过测试。这是我上面描述的.ts中的函数:
handleRecentSearchesDisplay(recentSearches: RecentSearch[]): void {
if (recentSearches) {
this.recentSearchesHasValue = true;
this.recentSearches = recentSearches;
this.viewRecentSearches = [];
for (const search of recentSearches) {
this.viewRecentSearches.push(this.createRecentSearch(search));
}
if (!this.viewRecentSearches.length) {
this.progressbarVisibility.emit(false);
}
}
}
这是我失败的测试:
describe('handleRecentSearchesDisplay', () => {
let recentSearch: RecentSearch[] = RecentSearchesTestModal;
it('display recent label if recentSearch is not empty', () => {
spyOn(component, 'createRecentSearch');
component.handleRecentSearchesDisplay(recentSearch);
expect(component.recentSearchesHasValue).toBeTrue();
});
it('Do not display recent label if recentSearch is empty', () => {
spyOn(component, 'createRecentSearch');
let recentSearch = [];
component.handleRecentSearchesDisplay(recentSearch);
expect(component.recentSearchesHasValue).toBeFalse();
});
});
感谢您的帮助。谢谢。
我认为您必须将 if 条件更改为:
handleRecentSearchesDisplay(recentSearches: RecentSearch[]): void {
if (recentSearches?.length > 0) { // here you need to test if list is not empty
this.recentSearchesHasValue = true;
this.recentSearches = recentSearches;
this.viewRecentSearches = [];
for (const search of recentSearches) {
this.viewRecentSearches.push(this.createRecentSearch(search));
}
if (!this.viewRecentSearches.length) {
this.progressbarVisibility.emit(false);
}
}
}