Параметризованные тесты с помощью Mocha - программирование

Параметризованные тесты с помощью Mocha

Как создать параметризованные тесты с помощью Mocha?

Пример использования: у меня есть 10 классов, которые представляют собой 10 различных реализаций одного и того же интерфейса. Я хочу запустить ту же самую модель тестов для каждого класса. Я могу создать функцию, которая принимает класс как параметр и запускает все тесты с этим классом, но тогда у меня будут все тесты в одной функции - я не смогу их разделить на разные "описательные" предложения...

Есть ли естественный способ сделать это в Mocha?

4b9b3361

Ответ 1

Взгляните на async.each. Он должен позволять вам вызывать те же инструкции описания, it и expect/should, и вы можете передать параметры в закрытие.

var async = require('async')
var expect = require('expect.js')

async.each([1,2,3], function(itemNumber, callback) {
  describe('Test # ' + itemNumber, function () {
    it("should be a number", function (done) {
      expect(itemNumber).to.be.a('number')
      expect(itemNumber).to.be(itemNumber)
      done()
    });
  });
callback()
});

дает мне:

$ mocha test.js -R spec
  Test # 1
    ✓ should be a number 
  Test # 2
    ✓ should be a number 
  Test # 3
    ✓ should be a number 
  3 tests complete (19 ms)

Здесь приведен более сложный пример, объединяющий async.series и async.parallel: Node.js Асинхронный тест Mocha не возвращается из обратных вызовов

Ответ 2

Вам не нужен пакет async. Вы можете напрямую использовать цикл forEach:

[1,2,3].forEach(function (itemNumber) {
    describe("Test # " + itemNumber, function () {
        it("should be a number", function (done) {
            expect(itemNumber).to.be.a('number')
            expect(itemNumber).to.be(itemNumber) 
        });
    });
});

Ответ 3

Я знаю, что это было опубликовано некоторое время назад, но теперь есть модуль node, который делает это очень просто! mocha param

const itParam = require('mocha-param').itParam;
const myData = [{ name: 'rob', age: 23 }, { name: 'sally', age: 29 }];

describe('test with array of data', () => {
    itParam("test each person object in the array", myData, (person) =>   {
    expect(person.age).to.be.greaterThan(20);
  })
})