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

     2023-02-19     304

关键词:

【中文标题】如何使用 karma/jasmine 在 angularAMD 中模拟服务?【英文标题】:How to mock service in angularAMD with karma/jasmine? 【发布时间】:2014-12-12 23:44:13 【问题描述】:

我有一个使用 AngularAMD/RequireJS/Karma/Jasmine 的项目,我的基本配置一切正常,大多数单元测试运行并成功通过。

我无法使用 angular.mock.module 或 angularAMD.value() 正确注入模拟服务。

我有:

// service definition in services/MyService.js
define(['app'], 
       function(app) 
           app.factory('myService', [ '$document', function($document) 
               function add(html) 
                   $document.find('body').append(html);
               
               return  add: add ; 
           ]);
       
);


// test
define(['angularAMD', 'angular-mocks', 'app', 'services/MyService'],
       function(aamd, mocks, app) 
           describe('MyService', function() 
               var myBodyMock = 
                   append: function() 
               ;
               var myDocumentMock = 
                   find: function(sel) 
                       // this never gets called 
                       console.log('selector: ' + sel);
                       return myBodyMock; 
                   
               ; 
               var svc;
               beforeEach(function() 
                   // try standard way to mock a service through ng-mock
                   mocks.module(function($provide) 
                       $provide.value('$document', myDocumentMock);
                   );
                   // hedge my bets - try overriding in aamd as well as ng-mock
                   aamd.value('$document', myDocumentMock);              
               );
               beforeEach(function()  
                   aamd.inject(['myService', 
                               function(myService) 
                                   svc = myService;
                               ]);
               );
               it('should work', function() 
                   // use svc expecting it to have injected mock of $document.
                   spyOn(myDocumentMock, 'find').andCallThrough();
                   spyOn(myBodyMock, 'append');
                   svc.add('<p></p>');
                   expect(myDocumentMock.find).toHaveBeenCalledWith('body');
                   expect(myBockMock.append).toHaveBeenCalledWith('<p></p>');
               );
           );
       
);

有人知道我哪里出错了吗?任何帮助将不胜感激。

【问题讨论】:

看看angularamd的git,有一些很好的测试例子。 【参考方案1】:

Angular 不是异步的,我认为两者都不是一个好主意。如果你想找到一个好的模块化方法,好吧,但是在你把它放在你的浏览器上之前使用 RequireJS 优化器来构建所有东西,关于测试,我认为你可以在之前使用 RequireJS 优化器来构建你的模块,它会让你摆脱“即使在测试中的 CommonJS 环境”。

【讨论】:

【参考方案2】:

看起来这将是可变范围的问题,业力对此非常挑剔。我认为您应该全局初始化您的模拟对象,然后将它们设置在 beforeEach 中。

我的测试文件的第一行总是看起来像:

var bodyMock, svcMock, foo, bar

然后在 beforeEach'es 中设置值

编辑:由于 bodyMock 只是一个范围变量,因此在测试实际运行并且浏览器正在寻找对象“bodyMock”时,它找不到任何东西。

【讨论】:

Karma/Jasmine 在没有运行测试的情况下超时

】Karma/Jasmine在没有运行测试的情况下超时【英文标题】:Karma/Jasminetimesoutwithoutrunningtests【发布时间】:2014-07-2922:44:48【问题描述】:我正在尝试在使用Grunt生成的项目上运行Karma/Jasminehttp://newtriks.com/2013/12/31/automating-react-with-yeoma... 查看详情

Ruby on Rails 5.1 和 Vue.js 2.4.x – 使用 Karma、Jasmine 进行测试 – 如何安装?

】RubyonRails5.1和Vue.js2.4.x–使用Karma、Jasmine进行测试–如何安装?【英文标题】:RubyonRails5.1&Vue.js2.4.x–TestingwithKarma,Jasmine– Howtoinstall?【发布时间】:2018-02-2123:35:28【问题描述】:我有Rails5.1.x和Vue.js2.4.x;我不会在前端混合... 查看详情

在我的 JSPM 包上使用 JSPM 404 进行 Karma/Jasmine 单元测试

】在我的JSPM包上使用JSPM404进行Karma/Jasmine单元测试【英文标题】:Karma/JasmineunittestwithJSPM404onmyJSPMpackages【发布时间】:2016-08-0800:49:42【问题描述】:我试图让JSPM/Karma/Babel/Jasmine一起工作。但是运行karmastart时出现错误1504201617:34:02.... 查看详情

Angular Karma Jasmine 错误:非法状态:无法加载指令摘要

】AngularKarmaJasmine错误:非法状态:无法加载指令摘要【英文标题】:AngularKarmaJasmineError:Illegalstate:Couldnotloadthesummaryfordirective【发布时间】:2018-01-1700:08:09【问题描述】:我正在开发一个githubrepository(使用angular7和angular-cli),并... 查看详情

使用 Karma Jasmine 的 Angular 1.5 组件模板单元测试

】使用KarmaJasmine的Angular1.5组件模板单元测试【英文标题】:Angular1.5ComponenttemplateunittestwithKarmaJasmine【发布时间】:2017-09-1522:06:34【问题描述】:我正在尝试使用KarmaJasmine对Angular组件和模板进行单元测试。我正在使用ng-html2js测试... 查看详情

afterAll ReferenceError 中抛出错误:未定义模块,nodejs 中的 Karma/Jasmine 测试错误

...fterAllReferenceError中抛出错误:未定义模块,nodejs中的Karma/Jasmine测试错误【英文标题】:AnerrorwasthrowninafterAllReferenceError:moduleisnotdefined,Karma/Jasminetesterrorinnodejs【发布时间】:2019-12-2307:41:55【问题描述】:我正在尝试使用karma和jasmin... 查看详情

AngularJS + Karma + Jasmine + Karma-Coverage:空覆盖率报告

】AngularJS+Karma+Jasmine+Karma-Coverage:空覆盖率报告【英文标题】:AngularJS+Karma+Jasmine+Karma-Coverage:Emptycoveragereport【发布时间】:2014-06-0601:20:14【问题描述】:我正在尝试将我当前的AngularJS项目与KarmaCoverage集成。请在package.json和我的ka... 查看详情

Karma + Jasmine 下 angular.mock.inject 的 TypeScript AngularJS 控制器测试问题

】Karma+Jasmine下angular.mock.inject的TypeScriptAngularJS控制器测试问题【英文标题】:TypeScriptAngularJScontrollertestissuewithangular.mock.injectunderKarma+Jasmine【发布时间】:2016-09-1315:40:18【问题描述】:我正在尝试使用Jasmine+Karma测试用TypeScript编写... 查看详情

.karma+jasmine+karma-coverage

...大特性就是,它可以监控(Watch)文件的变化,然后自行执行。jasmine是一个行为驱动开发(TDD)测试框架,一个js测试框架,它不依赖于浏览器、dom或其他js框架。具体语法参照:官方api。1.1使用Karma对代码进行单元测试,首先需要安装一... 查看详情

Karma + Jasmine + Durandal + KnockoutJS + RequireJS 单元测试中不匹配的匿名 define() 模块

】Karma+Jasmine+Durandal+KnockoutJS+RequireJS单元测试中不匹配的匿名define()模块【英文标题】:Mismatchedanonymousdefine()moduleinunittestingwithKarma+Jasmine+Durandal+KnockoutJS+RequireJS【发布时间】:2020-05-0919:30:02【问题描述】:通过Karma为Asp.NetMVC项目使... 查看详情

Angular2材料'md-icon'不是Karma / Jasmine的已知元素

】Angular2材料\\\'md-icon\\\'不是Karma/Jasmine的已知元素【英文标题】:Angular2material\'md-icon\'isnotaknownelementwithKarma/JasmineAngular2材料\'md-icon\'不是Karma/Jasmine的已知元素【发布时间】:2017-05-0300:50:37【问题描述】:我正在使用Angular2应用程... 查看详情

Angular Karma Jasmine - 没有 LocaleService 的提供者

】AngularKarmaJasmine-没有LocaleService的提供者【英文标题】:AngularKarmaJasmin-NoproviderforLocaleService【发布时间】:2020-11-2201:15:15【问题描述】:当我尝试使用karmajasmin进行测试时,我收到了这个错误...NullInjectorError:StaticInjectorError(DynamicT... 查看详情

javascript窥探私人服务karma,jasmine(代码片段)

查看详情

未捕获的类型错误:无法读取未定义抛出的属性“coSearchCriteria” - Angular Karma/Jasmine

...:无法读取未定义抛出的属性“coSearchCriteria”-AngularKarma/Jasmine【英文标题】:UncaughtTypeError:Cannotreadproperty\'coSearchCriteria\'ofundefinedthrown-AngularKarma/Jasmine【发布时间】:2019-02-0721:01:27【问题描述】:我尝试使用Karma/Jasmine测试Angula 查看详情

javascript检查取消订阅成功karma,jasmine(代码片段)

查看详情

Karma/Jasmine 测试失败并出现错误:'未捕获的错误:尚未为上下文加载模块名称“simple_test.js”:_。使用要求([])'

】Karma/Jasmine测试失败并出现错误:\\\'未捕获的错误:尚未为上下文加载模块名称“simple_test.js”:_。使用要求([])\\\'【英文标题】:Karma/Jasminetestsfailwitherror:\'UncaughtError:Modulename"simple_test.js"hasnotbeenloadedyetforcontext:_.Usere... 查看详情

Angular Karma Jasmine 单元测试在 afterAll TypeError 中引发错误:users.forEach 不是函数

】AngularKarmaJasmine单元测试在afterAllTypeError中引发错误:users.forEach不是函数【英文标题】:AngularKarmaJasmineUnitTestAnerrorwasthrowninafterAllTypeError:users.forEachisnotafunction【发布时间】:2021-12-2711:57:43【问题描述】:我是下面代码的单元测... 查看详情

Angular Karma Jasmine - 测试功能

】AngularKarmaJasmine-测试功能【英文标题】:AngularKarmaJasmine-testfunction【发布时间】:2018-01-3112:41:17【问题描述】:基本上我必须测试这个下面的函数,我正在从文本文件中读取$window.resolveLocalFileSystemURL(cordova.file.dataDirectory,function(d... 查看详情