2016-05-02 3 views
0

У меня есть функция, называемая getTodaysHours() в моем контроллере, которую я бы хотел проверить. Мне было интересно, могу ли я издеваться над данными JSON ниже в моей спецификации тестирования устройств?как издеваться над json-данными для модульного тестирования?

describe('vendor controller',() => { 
    let vm; 

    beforeEach(angular.mock.module('thcmaps-ui')); 
    beforeEach(inject(($controller) => { 
     vm = $controller('VendorController'); 
     vm.data = {"_id":"56b54f9368e685ca04aa0b87","lat_lon":"33.713018,-117.841101",...} 
    })); 

    it('should state store hours for today',() => { 
     console.log(vm.data); 
     expect(1).toEqual(1); 
    }); 
}); 

vendor.controller

export class VendorController { 
    constructor($rootScope, data, event, toastr, moment, _, distanceService, vendorDataService, userDataService, stateManagerService) { 
     'ngInject'; 
     //deps 
     this.$rootScope = $rootScope; 
     this.toastr = toastr; 
     this._ = _; 
     this.userDataService = userDataService; 
     this.vendorDataService = vendorDataService; 
     this.stateManagerService = stateManagerService; 
     this.event = event; 

     //bootstrap 
     data.isDeepLink = true; 
     this.data = data; 
     this.data.last_update = moment(this.data.updated_at).format('MM/DD/YY h:mm A'); 
     this.data.distance = distanceService.getDistance(this.data.loc.lng, this.data.loc.lat); 
     this.data.todaysHours = this.getTodaysHours(); 
     this.data.rating_num = Math.floor(data.rating); 


     this.hasReviewed = (userDataService.user.reviewed[data._id]) ? true : false; 
     this.isGrid = false; 
     this.isSearching = false; 
     this.hideIntro = true; 
     this.menuCollapsed = true; 
     this.filterMenuCollapsed = true; 

     this.selectedCategory = 'All'; 
     this.todaysHours = ''; 
     this.type = ''; 
     this.searchString = ''; 

     this.reviewScore = 0; 

     this.today = new Date().getDay(); 

     this.vendorDataService.currentVendor = data; 

     //load marker onto map 
     $rootScope.$broadcast(event.ui.vendor.pageLoad, data); 

     //get menu 
     vendorDataService.getVendorMenu(data._id) 
      .then((res)=> { 
       this.data.menu = res.menu; 
       this.menuContainer = this.data.menu; 
       this.totalResults = this.getTotalResults(); 
       this.availableMenuCategories = this.getAvailableMenuCategories(); 
      }) 
      .catch(() => { 
       this.toastr.error('Whoops, Something went wrong! We were not able to load the menu.', 'Error'); 
      }); 
    } 

    //get todays hours 
    getTodaysHours() { 
     let today = this.data.hours[new Date().getDay()]; 
     return (today.opening_time || '9:00am') + ' - ' + (today.closing_time || '5:00pm'); 
    } 
} 

Когда я попытался войти vm.data Я получаю

Error: [$injector:unpr] Unknown provider: dataProvider <- data <- VendorController

TypeError: undefined is not an object (evaluating 'vm.data')

+0

Ваш объект vm.data содержит ', ...', который не является допустимым объектом, является ли это вашим реальным объектом или потому, что вы удалили некоторые свойства ...? – yishaiz

+0

также см. [Этот ответ] (http://stackoverflow.com/a/18523642/3883957) для json mock data, так я предоставляю json mock data для своих тестов – yishaiz

+0

спасибо, json был слишком длинным, поэтому Я оставил некоторые части – Brett

ответ

1

данные Mocking JSON должны работать с $ обеспечивают постоянное, после издевательств над вашим модулем.

let data = {"_id":"56b54f9368e685ca04aa0b87", 
"lat_lon":"33.713018,-117.841101",...} 

beforeEach(angular.mock.module('thcmaps-ui', 
($provide) => { 
    $provide.constant('data', new data); 
    })); 

Честно говоря, я просто попытался его с функциями, а не с данными JSON, но он должен работать таким же образом.

+0

благодаря данным Clemens * data * правильно. однако, когда я пытался ввести контроллер в beforeEach, он не прошел тест с ошибкой. моя спецификация выглядит следующим образом: https://jsfiddle.net/mL5h2v1t/ – Brett

+0

Думаю, вам тоже надо насмехаться над контроллером, издеваясь над данными с чем-то вроде 'beforeEach (angular.mockule ('VendorController')); «Я не совсем уверен, если ваша инъекция контроллера правильная, я отвечу снова, если узнаю что-то новое. –

Смежные вопросы