Угловое тестирование контроллера с использованием фиктивного завода, которое возвращает обещание

Я пытаюсь протестировать Angular-контроллер и смоделировать фабрику, чтобы я мог использовать его в этом же тесте. Я довольно плохо знаком с тестированием Angular, и мне было трудно понять, как это сделать. Моя фабрика, не использующая $http, а службу $q, возвращает обещание. Я также не уверен в том, что поместить в мою фиктивную фабрику, учитывая, что вызовы фабричной функции возвращают обещание.

Моя конечная цель - вызвать мой фиктивный завод с моего контроллера и затем проверить два массива в моем контроллере на предмет данных, которые должны их заполнить. Если у вас есть какие-либо советы по реструктуризации моих тестов на тестируемость, оставьте отзыв.

Угловой контроллер

    export class workListController {
      constructor(dataService, $q) {
        this.$q = $q;
        this.work = [];
        this.tasks = [];
        this.dataService = dataService;
        this.setup();
      }

      setup() {
        this.$q.all([this.dataService.getWorkItems(), this.dataService.getTasks()])
        .then(() => {
          this.work = this.dataService.getState().work;
          this.tasks = this.dataService.getState().tasks;
          this.dataService.addNumberOTasksToWork();
        });
      }

      tasksForWork(workId) {
        var workTasks = [];
        for (let task of this.tasks) {
          if (task.agf__Work__c === workId) {
            workTasks.push(task);
          }
        }
        return workTasks;
      };

    }

Угловая Фабрика

  const dataService = ($q) => {
    let work = [];
    let tasks = [];
    let connection = new Connection{/**/};

    return { getWorkItems, getTasks, addNumberOTasksToWork, getState};
    function queryWrapper(query) {
      var deferred = $q.defer();
      connection.query(query)
        .then(function(result) {
          deferred.resolve(result);
        }, function(error) {
          deferred.reject(error);
        });

      return deferred.promise;
    }


    function getWorkItems() {
      return queryWrapper(`SELECT Id, ......`)
       .then((data) => {
         //data looks like this: {totalSize: 3, done: true, records: [......]}
         work = data.records;
       });
    }

    function getTasks() {
      return queryWrapper(`SELECT Id,...`)
       .then((data) => {
         //data looks like this: {totalSize: 3, done: true, records: [......]}
         tasks = data.records;
       });
    }

    function addNumberOTasksToWork() {
      work.forEach((workItem) => {
        workItem.numberOfTasks = 0;
      });
      work.forEach((workItem) => {
        tasks.forEach((taskItem) => {
          if (taskItem.agf__Work__c === workItem.Id) {
            workItem.numberOfTasks++;
          }
        });
      });
    }

    function getState(){
      return {work,tasks};
    }

  };

  export {dataService};

Тестовый файл

  import {workList} from './work-list.module.js';
  import {workListDirective} from './work-list.directive.js';
  import template from './work-list.html';
  import {workListController} from './work-list.controller.js';

  describe('AA_TaskBoard -  workList', function () {
    let $scope;
    let $controller;
    let $httpBackend;
    let mockDataService;

    beforeEach(angular.mock.module(workList.name));
    //trying to mock factory
    beforeEach(angular.mock.module(function($provide) {
      $provide.value('dataService', mockDataService);
      mockDataService = {
        getWorkItems: function(){
          //this should return a promise, but unsure of what to put here
          return {

          };
        },
        getTasks: function(){
          return {

          };
        }
      };

    }));


    beforeEach(inject(function(_$rootScope_, _$controller_, _$httpBackend_) {
      $rootScope = _$rootScope_;
      $controller = _$controller_;
      $httpBackend = _$httpBackend_;
    }));





  });

0 ответов

Другие вопросы по тегам