Advertisement
KoMeDiAnT

Tests

Dec 29th, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import assert from 'assert';
  2.  
  3. import { afterEach, describe, it } from 'mocha';
  4. import sinon, { SinonSpy } from 'sinon';
  5.  
  6. import { NewsState } from '../state/news';
  7. import { MobileView } from '../views/mobile';
  8. import { WeatherState } from '../state/weather';
  9.  
  10. describe('MobileView', () => {
  11.     let consoleSpy: SinonSpy | null = null;
  12.  
  13.     afterEach(() => {
  14.         if (consoleSpy) {
  15.             consoleSpy.restore();
  16.         }
  17.     });
  18.  
  19.     it('изменение данных в NewState должно вызывать метод render', () => {
  20.         const newsState = new NewsState();
  21.         const mobileView = new MobileView();
  22.         const renderSpy = sinon.spy(mobileView, 'render');
  23.  
  24.         newsState.addObserver(mobileView);
  25.         newsState.setArticles([
  26.             {
  27.                 time: '09:00',
  28.                 category: 'Алгоритмы',
  29.                 title: 'Подборка алгоритмов, которые правят миром'
  30.             },
  31.             {
  32.                 time: '10:00',
  33.                 category: 'Python',
  34.                 title: 'Рефакторим код на Python с помощью тестов'
  35.             },
  36.             {
  37.                 time: '12:00',
  38.                 category: 'JavaScript',
  39.                 title: 'Как использовать декораторы с фабричными функциями в JavaScript'
  40.             }
  41.         ]);
  42.         assert.ok(renderSpy.called, 'метод render() не вызван');
  43.     });
  44.  
  45.     it('.render должен писать про изменения NewsState в console.log', () => {
  46.         const newsState = new NewsState();
  47.         const mobileView = new MobileView();
  48.  
  49.         consoleSpy = sinon.spy(console, 'log');
  50.  
  51.         newsState.addObserver(mobileView);
  52.         newsState.setArticles([
  53.             {
  54.                 time: '09:00',
  55.                 category: 'Алгоритмы',
  56.                 title: 'Подборка алгоритмов, которые правят миром'
  57.             }
  58.         ]);
  59.  
  60.         const markup =
  61.             '<div class="mobile">\n' +
  62.             '[09:00] Алгоритмы - Подборка алгоритмов, которые правят миром\n' +
  63.             '</div>';
  64.  
  65.         assert.ok(consoleSpy.calledOnce, 'render был вызван более 1 раза');
  66.         assert.ok(consoleSpy.calledWith(markup), 'Выведена некорректная разметка');
  67.     });
  68.  
  69.     // Мой тест
  70.     it('.render должен написать и погоду и новости в console.log', () => {
  71.         const weatherState = new WeatherState();
  72.         const newsState = new NewsState();
  73.         const mobileView = new MobileView();
  74.  
  75.         consoleSpy = sinon.spy(console, 'log');
  76.  
  77.         newsState.addObserver(mobileView);
  78.         weatherState.addObserver(mobileView);
  79.  
  80.         newsState.setArticles([
  81.             {
  82.                 time: '12:00',
  83.                 category: 'JavaScript',
  84.                 title: 'Как использовать декораторы с фабричными функциями в JavaScript'
  85.             }
  86.         ]);
  87.  
  88.         weatherState.setMeasurements([
  89.             {
  90.                 time: '08:00',
  91.                 temperature: -16.6,
  92.                 pressure: 771.3,
  93.                 humidity: 79
  94.             },
  95.             {
  96.                 time: '12:00',
  97.                 temperature: -8.2,
  98.                 pressure: 766.4,
  99.                 humidity: 80
  100.             }
  101.         ]);
  102.  
  103.         const markupAll =
  104.             '<div class="mobile">\n' +
  105.             '[12:00] JavaScript - Как использовать декораторы с фабричными функциями в JavaScript\n' +
  106.             '[12:00] -8.2 C, 766.4 P, 80 U\n' +
  107.             '</div>';
  108.  
  109.         assert.ok(consoleSpy.calledWith(markupAll), 'lalka');
  110.     });
  111. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement