zoukankan      html  css  js  c++  java
  • [AngularJS] Test an Angular Component with $componentController

    Traditionally you had to create DOM elements to test a directive but by shifting our focus to components, writing unit tests got a lot easier using $componentControllerwithin ngMocks. We can now test our component's controller with an easy to use API that does not require us to spin up any DOM elements to do so. In this lesson, we will see how our ES6 tests are transpiled, learn how to test a component using$componentController and talk about how to simulate lifecycle hooks.

    Controller:

    class CategoriesController {
      constructor(CategoriesModel) {
        'ngInject';
    
        this.CategoriesModel = CategoriesModel;
      }
    
      $onInit() {
        this.CategoriesModel.getCategories()
          .then(result => this.categories = result);
      }
    
      onCategorySelected(category) {
        this.CategoriesModel.setCurrentCategory(category);
      }
    
      isCurrentCategory(category) {
        return this.CategoriesModel.getCurrentCategory() &&
          this.CategoriesModel.getCurrentCategory().id === category.id;
      }
    }
    
    export default CategoriesController;

    Test:

    import CategoriesModule from './categories';
    import CategoriesController from './categories.controller';
    import CategoriesComponent from './categories.component';
    import CategoriesTemplate from './categories.html';
    
    describe('Categories', () => {
      let component, $componentController, CategoriesModel;
    
      beforeEach(() => {
        window.module('categories');
    
        window.module($provide => {
          $provide.value('CategoriesModel', {
            getCategories: () => {
              return {
                then: () => {}
              };
            }
          });
        });
      });
    
      beforeEach(inject((_$componentController_, _CategoriesModel_) => {
        CategoriesModel = _CategoriesModel_;
        $componentController = _$componentController_;
      }));
    
      describe('Module', () => {
        it('is named correctly', () => {
          expect(CategoriesModule.name).toEqual('categories');
        });
      });
    
      describe('Controller', () => {
        it('calls CategoriesModel.getCategories immediately', () => {
          spyOn(CategoriesModel, 'getCategories').and.callThrough();
    
          component = $componentController('categories', {
            CategoriesModel
          });
          component.$onInit();
    
          expect(CategoriesModel.getCategories).toHaveBeenCalled();
        });
      });
  • 相关阅读:
    ubuntn16.04指令
    [Array]283. Move Zeroes
    spring框架
    Redis服务器搭建/配置/及Jedis客户端的使用方法
    [Java Performance] 数据库性能最佳实践
    iOS 序列化和反序列化
    SSH 获取GET/POST参数
    MAC中安卓开发环境的下载
    MAC OS下使用OpenSSL生成私钥和公钥的方法
    如何使用TestFlight进行Beta测试
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5854379.html
Copyright © 2011-2022 走看看