如何使用 Mocha / Jasmine 在控制器方法中为 if else 案例获得 Karma 覆盖?
Posted
技术标签:
【中文标题】如何使用 Mocha / Jasmine 在控制器方法中为 if else 案例获得 Karma 覆盖?【英文标题】:How to get Karma coverage for the if else cases in controller method using Mocha / Jasmine? 【发布时间】:2017-04-22 04:59:55 【问题描述】:我有以下控制器方法:
function changeItem(itemList)
vm.selectedItem = '';
if(itemList !== null || itemList !== '' && itemList !== undefined)
if (itemList.guestFirstName !== '' &&
itemList.guestFirstName !== undefined &&
itemList.guestFirstName !== null)
vm.selectedItem += itemList.guestFirstName + ' ';
if (itemList.guestLastName !== '' &&
itemList.guestLastName !== undefined &&
itemList.guestLastName !== null)
vm.selectedItem += itemList.guestLastName + ' ';
Iif (itemList.type !== '' &&
itemList.type !== undefined &&
itemList.type !== null)
vm.selectedItem += itemList.type + '-';
if (itemList.id !== '' &&
itemList.id !== undefined &&
itemList.id !== null)
vm.selectedItem += itemList.id + ' ';
if (itemList.id === "All")
vm.selectedId.push(vm.itemLists.id);
else
vm.selectedId = itemList.id;
spec.js:
t('listController - changeItem()', inject(function ()
var itemList = [
"id":111,
"guestfirstName":"Test",
"guestlastName":"Test",
"type":"BUSINESS"
,
"id":222,
"guestfirstName":"Test",
"guestlastName":"Test",
"type":"BUSINESS"
,
];
var selectedItem = "Test Test BUSINESS-111"
controller.changeItem(itemList);
scope.$apply();
expect(controller.selectedItem).to.equal(selectedItem);
expect(controller.selectedId).to.equal(itemList[0].id);
));
但是,当我运行测试时,它说语句和分支除了函数之外没有被覆盖。
谢谢
【问题讨论】:
【参考方案1】:您可以使用单独的 it() 语句来检查 itemList 的各个部分,每次都巧妙地更改它,然后重新运行 changeItem() 方法。然后,您将定制该 itemList 以达到每个 if 语句以达到您需要的覆盖范围。请记住,您必须确保测试提供了一些东西。
我可能会将 itemList 声明移到 beforeEach() 中,然后在每个 it() 测试中稍作修改:
itemList[0].guestLastName = '';
另一方面,我建议使用 Ramda 或 Lodash 等 3rd 方库来处理您的未定义/空值检查。 if (!_.isNil(guestLastName)) 例如将涵盖您的所有 3 个测试。
【讨论】:
能否详细说明或举个例子?对不起,我是新来的蜜蜂以上是关于如何使用 Mocha / Jasmine 在控制器方法中为 if else 案例获得 Karma 覆盖?的主要内容,如果未能解决你的问题,请参考以下文章
针对 Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [关闭]
javascript 用于邮差测试脚本的mocha / jasmine兼容测试框架(缩小不到1KB)
html 转换器markdown多级列表到jasmine / mocha测试结构http://jsbin.com/qahurad