我正在尝试学习如何为AngularJS编写单元测试。我从一开始就开始了
angular.module(…).config(…)
我想测试里面的配置。以下是相关部分的外观:
angular.module('ogApp',['ngCookies','ui.router','ogControllers','ogServices','ogDirectives','ogMetricsData']) .config([ '$stateProvider','$locationProvider',function ($stateProvider,$locationProvider) { $stateProvider. state('login',{ templateUrl: 'connect.html' }).state('addViews',{ templateUrl: 'add-views.html' }).state('dashboard',{ templateUrl: 'dashboard.html' }); $locationProvider. html5Mode(true). hashPrefix('!'); } ]);
我想最简单的方法来测试这个代码是为$ stateProvider和$ locationProvider注入mocks。然后执行配置阶段。之后,断言$ stateProvider和$ locationProvider应该如何。
如果我的想法是正确的,那么我的问题是,我不知道如何将这些模拟注入到模块中,并从测试中执行它的配置阶段。
你能告诉我如何测试这个代码?
以下是访问您的提供商进行单元测试的方法:
原文链接:https://www.f2er.com/angularjs/144958.htmldescribe('yourProvider',function () { var provider; // Get the provider beforeEach(module('app',function (yourProvider) { // This callback is only called during instantiation provider = yourProvider; }); // Kick off the above function beforeEach(inject(function () {})); it('does its thing',function () { expect(provider.someMethod()).toEqual('your results'); }); });
我还没有想出一个非常简单的注入模拟的方法,但是你可以轻松地窥探方法,而且足够近。如果您需要从依赖提供者的$ get()方法返回的模拟,那么您可以使用另一个间谍来执行此操作。此示例说明返回模拟并设置其他间谍。
describe('yourProvider',function () { var dependency,mock,provider; beforeEach(module('app',function (dependencyProvider) { dependency = dependencyProvider; mock = jasmine.createSpyObj('dependency',[ 'methodsGoHere' ]); spyOn(dependency,'methodName'); spyOn(dependency,'$get').andReturn(mock); },function (yourProvider) { provider = yourProvider; }); beforeEach(inject(function () {})); it('does its thing',function () { expect(provider.someMethod()).toEqual('your results'); expect(dependency.methodName).toHaveBeenCalled(); }); it('returns the mock from $get',function () { expect(dependency.$get).toBe(mock); }); });