1

Тема: Хтось використовує Jasmine, чи може інший фремворк для Unit tests?

Для тестів JavaScript я використовую Jasmine. Коли тестуєш щось невеличке, типу форми для залогінення, то код Jasmine досить читабельний, займає не багато місця.

Але коли тестуєш щось по складніше, коли спочатку треба зробити макет одного-двох класів, потім створити інстанс класа, який тестую, а ще потім передавати різну комбінацію параметрів, то код для одного класа легко розростається до тисячі рядків. Тому такі тести вже самі потребують тестування (чи там правильно все тестується).

Ніхто з реплесівців не використовує Jasmine чи може інший фреймворк для JavaScript може є якісь правила для скорочення коду?

Подякували: leofun01, 221VOLT2

2

Re: Хтось використовує Jasmine, чи може інший фремворк для Unit tests?

Забув уточнити що роздування коду в значній мірі пов'язано з конструкціями з Промісами. Зараз проглядав нову функціональність у ES2015, то у них вже є генератори та Async Functions. Схоже що дуже скоро мій код можна буде скоротити більше, ніж на половину.

Подякували: leofun011

3

Re: Хтось використовує Jasmine, чи може інший фремворк для Unit tests?

Одне із правил скорочення коду при тестуванні контролерів - не використовувати макети об'єктів запиту й відповіді, замість них краще використовувати бекенд-клієнти.

4

Re: Хтось використовує Jasmine, чи може інший фремворк для Unit tests?

Аж тепер бачу, що ось це погана рекомендація:

ktretyak написав:

Одне із правил скорочення коду при тестуванні контролерів - не використовувати макети об'єктів запиту й відповіді, замість них краще використовувати бекенд-клієнти.

Бо клієнти також можуть глючити. Краще витратити більше часу й рядків коду на створення повноцінного макету для тестування, ніж скоротити пару сотень рядків за рахунок зменшення надійності тестів.

А взагалі, нещодавно пізнав справжню красу Angular DI (той, що йде у комплекті з @angular/core). Раніше мені не подобалось що абсолютно усіх провайдерів залежностей необхідно записувати в одному масиві, коли створюєте інжектор. Це здавалось менш зручним, ніж той варіант, що пропонує ts-di, але зараз бачу, що теперішня версія Angular DI - це ідеальне рішення для і для роботи, і для тестування, бо не зачіпаючи коду в самих класах (якщо вони правильно спроектовані), можна у DI передавати абсолютно різні комбінації провайдерів, підмінюючи справжніх провайдерів на тестові.

5 Востаннє редагувалося ktretyak (21.02.2017 20:51:17)

Re: Хтось використовує Jasmine, чи може інший фремворк для Unit tests?

Ще одна можливість скорочення коду зараз із ES2015+ стала доступною із новою структурою даних завдяки класу Map():

describe(`Class Server:`, () =>
{
  describe(`shuld to throw error when passing:`, () =>
  {
    const badOptions = new Map();
    badOptions.set('', `string to its constructor`);
    badOptions.set(54646, `number to its constructor`);
    badOptions.set([], `array to its constructor`);
    badOptions.set({ providersPerServer: '' }, `options object with string for 'providersPerServer' to its constructor`);
    badOptions.set({ providersPerRequest: '' }, `options object with string for 'providersPerRequest' to its constructor`);

    badOptions.forEach( (message, option) =>
    {
      it( message, () =>
      {
        expect( () => new Server(option) ).toThrow();
      });
    });
  });

  describe(`shuld not to throw error when passing:`, () =>
  {
    const goodOptions = new Map();
    goodOptions.set(undefined, `any value to its constructor`);
    goodOptions.set({}, `empty object to its constructor`);
    goodOptions.set({ providersPerServer: [] }, `options object with empty array for 'providersPerServer' to its constructor`);
    goodOptions.set({ providersPerRequest: [] }, `options object with empty array for 'providersPerRequest' to its constructor`);

    goodOptions.forEach( (message, option) =>
    {
      it( message, () =>
      {
        expect( () => new Server(option) ).not.toThrow();
      });
    });

  });
});

6

Re: Хтось використовує Jasmine, чи може інший фремворк для Unit tests?

Я зараз вимушений писати на цьому прибацаному JS. Так от, подивився я на ваш Jasmine і ... написав свій фреймворк.