angular-debaser, 一个更好的测试AngularJS应用程序的方法

分享于 

5分钟阅读

GitHub

  繁體 雙語
Just a better way to test AngularJS code.
  • 源代码名称:angular-debaser
  • 源代码网址:http://www.github.com/decipherinc/angular-debaser
  • angular-debaser源代码文档
  • angular-debaser源代码下载
  • Git URL:
    git://www.github.com/decipherinc/angular-debaser.git
    Git Clone代码到本地:
    git clone http://www.github.com/decipherinc/angular-debaser
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/decipherinc/angular-debaser
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    角 debaserBuild StatusCode ClimateTest Coverage

    一个更好的测试AngularJS应用程序的方法。

    这个想法

    AngularJS及其依赖注入使得在测试中隔离代码变得非常容易。
    不幸的是,为这些服务编写存根可能会导致令人烦恼的(。注入了许多服务,许多模块依赖于模块),最终可以使用一个简单的。

    角度 debaser 尝试减少设备的尺寸,使它的更自然地写入。

    示例

    根据以下的beastly和测试:

    describe('AdminDashboardCtrl', function () {
     var sandbox;
     beforeEach(function () {
     sandbox =sinon.sandbox.create('AdminDashboardCtrl');
     });
     afterEach(function() {
     sandbox.restore();
     });
     beforeEach(module(function ($provide) {
     $provide.provider('User', function () {
     this.assertAdmin=sandbox.stub();
     this.$get=function() {
     return {
     getAll:sandbox.stub().returns([])
     };
     };
     });
     $provide.service('Settings', function() {
     this.location_id=1;
     });
     $provide.service('Pizza', function() {
     this.getAll=sandbox.stub().returns([]);
     });
     $provide.service('Toppings', function() {
     this.getAll=sandbox.stub().returns({});
     });
     $provide.service('Sides', function() {
     this.getAll=sandbox.stub().returns([]);
     });
     $provide.service('Orders', function() {
     this.getPreviousWeek=sandbox.stub().returns([]);
     });
     $provide.service('Deliveries', function() {
     this.getPreviousWeek=sandbox.stub().returns([]);
     });
     }));
     beforeEach(module('donny.pizzajoint.admin'));
     it('should gather a list of users', inject(function ($controller, $rootScope, User) {
     var scope =$rootScope.$new();
     $controller('AdminDashboardCtrl', {
     $scope: scope
     });
     expect(scope.getUsers()).to.eql([]);
     expect(User.getAll).to.have.been.calledOnce;
     }));
    });

    我们将使用角度 debaser。 它变成了这样:

    describe('AdminDashboardCtrl', function () {
     beforeEach(function () {
     debaser()
    . module('donny.pizzajoint.admin')
    . object('Settings', {
     location_id:1 })
    . object('User').withFunc('getAll').returns([])
    . object('Pizza').withFunc('getAll').returns([])
    . object('Toppings').withFunc('getAll').returns({})
    . object('Sides').withFunc('getAll').returns([])
    . object('Orders').withFunc('getPreviousWeek').returns([])
    . object('Deliveries').withFunc('getPreviousWeek').returns([])
    . debase();
     });
     it('should gather a list of users',
     inject(function ($controller, User) {
     var scope =$controller('AdminDashboardCtrl');
     expect(scope.getUsers()).to.eql([]);
     expect(User.getAll).to.have.been.calledOnce;
     }));
    });

    ( 如果你计算,那是大约一半的线。)

    有兴趣尝试测试注入 46个服务的东西? 你可能想阅读教程 & go rabbit。

    API

    注意:如果存在,请参见这个 API

    请参见 API文档

    安装

    
    bower install angular-debaser
    
    
    
    

    或者,将它保存到你的bower.json: 你可能不希望使用 --save ;请使用 --save-dev

    依赖项&推荐软件包

    当前依赖项:

    必需,但未标记为依赖项:

    推荐:

    • sinon 用于 $qbower install sinon-ng

    你可能希望通过 bower 或者 npm 安装这些安装程序,具体取决于你的测试 runner 设置:

    在使用 Karma 作为测试 runner/链时,可能需要获取 karma-chai-plugins来获取 sinon chain和 Chai-as-Promised。

    另外,如果你是测试指令,我发现 around around总是方便的。

    问题

    这里是问题。

    许可证

    版权所有 © 2014 解码。 授权 MIT。

    维护者


    angular  test  
    相关文章