我在我的一个angular度服务里面有一个函数,我想定期重复地调用它。 我想这样做使用$超时。 它看起来像这样: var interval = 1000; // Or something var _tick = function () { $timeout(function () { doStuff(); _tick(); }, interval); }; _tick(); 我现在很难与Jasmine一起进行unit testing – 我该怎么做? 如果我使用$timeout.flush()则函数调用将无限期地发生。 如果我使用茉莉花的模拟时钟, $timeout似乎不受影响。 基本上,如果我能得到这个工作,我应该很好去: describe("ANGULAR Manually ticking the Jasmine Mock Clock", function() { var timerCallback, $timeout; beforeEach(inject(function($injector) { $timeout = $injector.get('$timeout'); timerCallback = jasmine.createSpy('timerCallback'); jasmine.Clock.useMock(); })); […]
看来,承诺不会在Angular / Jasminetesting中解决,除非你强制$scope.$digest() 。 这是愚蠢的国际海事组织,但罚款,我有适用的工作(控制器)。 我现在的情况是我有一个服务,可以不在乎应用程序中的任何范围,它只是从服务器返回一些数据,但承诺似乎没有解决。 app.service('myService', function($q) { return { getSomething: function() { var deferred = $q.defer(); deferred.resolve('test'); return deferred.promise; } } }); describe('Method: getSomething', function() { // In this case the expect()s are never executed it('should get something', function(done) { var promise = myService.getSomething(); promise.then(function(resp) { expect(resp).toBe('test'); expect(1).toEqual(2); }); done(); }); // This […]
我正在用Jasmine写testing。 我有几个testing文件,每个文件都有一个beforeEach ,但是它们完全一样。 我如何为他们提供一个全球性的 beforeEach ?
我有一个对象,可能会延长我的行为在testing,但我想确保原来的属性仍然存在。 var example = {'foo':'bar', 'bar':'baz'} var result = extendingPipeline(example) // {'foo':'bar', 'bar':'baz', 'extension': Function} expect(result).toEqual(example) //fails miserably 我想在这种情况下有一个匹配器,通过: expect(result).toInclude(example) 我知道我可以写一个自定义的匹配器,但在我看来,这是一个常见的问题,应该已经有一个解决scheme了。 我应该在哪里找它?
所以我看到另一个问题: 如何在指令UT中模拟所需的指令控制器,这基本上是我的问题,但似乎这个线程的答案是“改变你的devise”。 我想确保没有办法做到这一点。 我有一个指令,声明一个由儿童指令使用的控制器。 我现在试图编写茉莉花testing的儿童指令,但我不能让他们在testing编译,因为他们依赖于控制器。 这是它的样子: addressModule.directive('address', ['$http', function($http){ return { replace: false, restrict: 'A', scope: { config: '=' }, template: '<div id="addressContainer">' + '<div ng-if="!showAddressSelectionPage" basic-address config="config"/>' + '<div ng-if="showAddressSelectionPage" address-selector addresses="standardizedAddresses"/>' + '</div>', controller: function($scope) { this.showAddressInput = function(){ $scope.showAddressSelectionPage = false; }; this.showAddressSelection = function(){ $scope.getStandardizedAddresses(); }; this.finish = function(){ $scope.finishAddress(); }; […]
我在我的Windows控制台上运行: npm install -g yo grunt-cli bower npm install -g generator-angular yo angular 然后,我用webstorm开始我的项目,并右键单击项目资源pipe理器中的karma.conf.js文件,在那里我有菜单项“运行karma.conf.js”,并开始业力运行。 然后我得到他的例外: …\app\node_modules\karma\node_modules\di\lib\injector.js:9 throw error('No provider for "' + name + '"!'); ^ Error: No provider for "framework:jasmine"! (Resolving: framework:jasmine) 然后在控制台我读我也可以使用 – 强制,所以我试了一下:grunt –force 这花了一些时间,但似乎没有更多的错误。 哎呀为什么 – 强制安装提供商? 这是在CMD中进行了testing。 咕噜服务现在工作,它启动我的浏览器与开始的应用程序。 那么是什么 – 强制这样做的错误:没有“框架:茉莉花”的提供者! (解决:框架:茉莉花)'走了? 当我在webstrom IDE中咕噜时,我再次得到: 警告:没有“framework:jasmine”的提供者! (解决:framework:jasmine)使用–force继续。 所以这个问题没有解决。
我有一些简单的业力/茉莉花unit testing运行在angularjs应用程序。 我使用最新版本的Chrome,并在WebStorm IDE中运行我的testing。 有时testing套件运行非常快(0.24秒) 有时,完全相同的代码完全相同的testing套件运行非常缓慢(120秒) 我已经尝试过每一个常识的修复。 我搜遍了networking,试图发现我做错了什么。 为什么我的testing运行得如此缓慢?
我知道,在摘要循环中调用$digest或$apply程序将导致“$摘要已在进行中”错误,但我不知道为什么我在这里得到它。 这是一个包装$http的服务的unit testing,服务非常简单,它只是防止重复调用服务器,同时确保尝试执行调用的代码仍然获得所需的数据。 angular.module('services') .factory('httpService', ['$http', function($http) { var pendingCalls = {}; var createKey = function(url, data, method) { return method + url + JSON.stringify(data); }; var send = function(url, data, method) { var key = createKey(url, data, method); if (pendingCalls[key]) { return pendingCalls[key]; } var promise = $http({ method: method, url: url, data: data […]
茉莉花的spyOn是很好的改变一个方法的行为,但有没有办法改变一个对象的价值属性(而不是一种方法)? 代码可能如下所示: spyOn(myObj, 'valueA').andReturn(1); expect(myObj.valueA).toBe(1);
我一直在为Ruby代码编写testing,但是作为一个前端开发人员,我显然有兴趣把它写入我为我的前端代码编写的代码中。 有很多不同的select,我一直在玩: CasperJS 水豚&Rspec 茉莉花 黄瓜或只是Rspec 什么是人们使用testing? 还有,人们testing什么呢? 只是JavaScript? 链接? forms? 硬编码的内容? 任何想法将不胜感激。