如何使用 Mocha / Jasmine 在控制器方法中为 if else 案例获得 Karma 覆盖?

     2023-03-16     189

关键词:

【中文标题】如何使用 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 个测试。

【讨论】:

能否详细说明或举个例子?对不起,我是新来的蜜蜂

Karma 与测试框架 Jasmine、Mocha、QUnit [关闭]

】Karma与测试框架Jasmine、Mocha、QUnit[关闭]【英文标题】:KarmavstestingframeworkJasmine,Mocha,QUnit[closed]【发布时间】:2014-11-1920:17:20【问题描述】:几个问题:Karma和测试框架X(Jasmine、Mocha、QUnit)如何相互关联?Java世界中的等效框架... 查看详情

如何使用 Mocha 在控制器中存根模块方法

】如何使用Mocha在控制器中存根模块方法【英文标题】:HowtostubamodulemethodinsideacontrollerwithMocha【发布时间】:2019-04-0803:03:36【问题描述】:我有一个这样的Sinatra应用程序:my_module.rbmoduleMyModuledefmy_method"yay"endendapp.rbget"/my_module"doput... 查看详情

在 Nodejs 中使用 Jasmine 测试 promise 是不是被解决或拒绝

】在Nodejs中使用Jasmine测试promise是不是被解决或拒绝【英文标题】:TestifapromiseisresolvedorrejectedwithJasmineinNodejs在Nodejs中使用Jasmine测试promise是否被解决或拒绝【发布时间】:2015-01-2516:21:08【问题描述】:我知道如何在Mocha中做到这... 查看详情

针对 Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [关闭]

】针对Rails3.1+的Jasmine与MochaJavaScript测试[关闭]【英文标题】:Jasminevs.MochaJavaScripttestingforRails3.1+[closed]【发布时间】:2012-03-3109:42:03【问题描述】:我有Jasmine的经验,并且非常喜欢它。有没有人有Jasmine和Mocha的经验,特别是Rails... 查看详情

如何在 Jasmine 测试中测试 $scope?

...】:我尝试使用Jasmine为Angularjs编写单元测试。这是我的控制器:functionHomeController($scope,fav,news,materials)console.log(\'homecontroller\');$scope.test 查看详情

如何使用 Mocha 测试 Angular 2?

...序(如果重要,则基于SystemJS),我只是不知道如何获取控制器实例。我正在尝试我能想到的最简单的情况;importbootstrapfrom\'an 查看详情

javascript用于邮差测试脚本的mocha/jasmine兼容测试框架(缩小不到1kb)(代码片段)

查看详情

如何确认我使用的是啥版本的 Jasmine?

】如何确认我使用的是啥版本的Jasmine?【英文标题】:HowcanIconfirmwhatversionofJasmineI\'musing?如何确认我使用的是什么版本的Jasmine?【发布时间】:2014-08-3017:37:24【问题描述】:如果我记得Jasmine中有一个命令可以将我正在运行的Jasm... 查看详情

如何确认我使用的是啥版本的 Jasmine?

】如何确认我使用的是啥版本的Jasmine?【英文标题】:HowcanIconfirmwhatversionofJasmineI\'musing?如何确认我使用的是什么版本的Jasmine?【发布时间】:2014-08-3017:37:24【问题描述】:如果我记得Jasmine中有一个命令可以将我正在运行的Jasm... 查看详情

在 Jasmine 单元测试中模拟 AngularJS 模块依赖项

...】:2013-07-0710:38:36【问题描述】:我试图在一个模块中对控制器代码进行单元测试,该模块将其他模块作为依赖项,但无法弄清楚如何正确模拟它们。我正在使用Jasmine框架并使用Karma(Testacular)运行我的测试。模块代码var 查看详情

如何使用 karma/jasmine 在 angularAMD 中模拟服务?

】如何使用karma/jasmine在angularAMD中模拟服务?【英文标题】:HowtomockserviceinangularAMDwithkarma/jasmine?【发布时间】:2014-12-1223:44:13【问题描述】:我有一个使用AngularAMD/RequireJS/Karma/Jasmine的项目,我的基本配置一切正常,大多数单元... 查看详情

html转换器markdown多级列表到jasmine/mocha测试结构http://jsbin.com/qahurad(代码片段)

查看详情

在 AngularJS/Jasmine 中注入 Mock 服务

...问题描述】:我正在使用jasmine来测试我用TypeScript编写的控制器。我的单元测试是用纯JavaScript编写的。我在测试控制器时遇到错误,我想在其中注入模拟服务。这是我的测试的样子:\'usestrict\';describe 查看详情

如何在 mocha 单元测试中使用猫鼬?

】如何在mocha单元测试中使用猫鼬?【英文标题】:Howtousemongooseinmochaunittest?【发布时间】:2014-10-1207:28:04【问题描述】:感觉很迷茫,怎么单元测试涉及到mocha中的mongodb,我还是不能成功调用save函数,没有抛出异常。我尝试用... 查看详情

如何在 Jasmine-Rails 中使用 CoffeeScript 规范

】如何在Jasmine-Rails中使用CoffeeScript规范【英文标题】:HowtouseCoffeeScriptspecswithJasmine-Rails【发布时间】:2013-06-1422:34:48【问题描述】:我正在运行带有Ruby版本2.0.0-p195的Rails3.2.13。我正在使用启用资产管道的Jasmine-Railsgem版本0.4.5。... 查看详情

如何使用 Mocha 在 Detox 中重试失败的端到端测试?

】如何使用Mocha在Detox中重试失败的端到端测试?【英文标题】:HowcanIretryfailedendtoendtestsinDetoxusingMocha?【发布时间】:2019-03-2217:09:06【问题描述】:我有一个使用Detox和Mocha的flakyend-to-endtest。Mocha测试运行器允许multipleretries。我尝... 查看详情

如何在 Jasmine 中使用 React 测试工具

】如何在Jasmine中使用React测试工具【英文标题】:HowtouseReactTestUtilitieswithJasmine【发布时间】:2014-03-3012:53:09【问题描述】:我用React的测试工具编写了单元测试代码。但是遇到了问题我的环境是:导轨4茉莉花2.0.0主干1.1.2describe("... 查看详情

使用 jasmine 对控制器中基于资源的工厂进行角度 js 单元测试

】使用jasmine对控制器中基于资源的工厂进行角度js单元测试【英文标题】:angularjsunittestusingjasmineforaresourcebasedfactoryincontroller【发布时间】:2016-07-2718:31:12【问题描述】:我是使用jasmine编写单元测试用例的新手。我正在尝试在控... 查看详情