Nyc не показывает покрытие для функций в массиве - PullRequest
0 голосов
/ 25 марта 2019

У меня есть список функций, которые фильтруются и выполняются после того, как в коде происходит определенное событие. Все функции оцениваются и экспортируются в виде массива, как показано ниже

const interceptors = [   
  {
    recipeName: 'Test1',
    vendor: 'aaa',
    os: 'bbb',
    completed(name, output) {
      const tableText = output.getCommandText('test list');
      const parser = new TableParser(tableText);
      const list = parser.getBody();
      Device.updateOne({ name }, { $set: { list } }, done);
    },
  },      
  {
    recipeName: 'Test2',
    vendor: 'aaa',
    os: 'bbb',
    completed(name, output) {
      const users = [];
      const text = output.output;
      const matches = matchAll(text, /^user (\w+)/gm) || [];
      matches.forEach((m) => {
        users.push({ username: m[1] });
      });
      Device.updateOne({ name }, { $set: { users } }, done);
    },
  },
];

module.exports = interceptors;    

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

const fs = require('fs');
const path = require('path');
const chai = require('chai');
const sinonChai = require('sinon-chai');
const sinon = require('sinon');

const { assert } = chai;
const interceptors = require('../../../core/recipes/test1/aaa-bb/interceptors');
const Device = require('../../../models/device');
require('sinon-mongoose');

chai.use(sinonChai);

  it('show user', () => {
    const name = 'TestDevice';
    const stub = sinon.stub(Device, 'updateOne');
    const interceptor = interceptors.filter(
      f => f.recipeName === 'Test2',
    )[0];
    const output = getTestData('data1.txt');
    const parser = new TerminalOutputParser(output);
    interceptor.completed('TestDevice', parser);

    const checkObject = sinon.match((users) => {
      assert.equal('cem', users[0].username);
      assert.equal('testuser', users[1].username);
      return true;
    });

    sinon.assert.calledWith(
      stub,
      sinon.match.has('name', name),
      sinon.match.has('$set', sinon.match.has('users', checkObject)),
    );
    Device.updateOne.restore();
  });
});

Есть ли способ показать покрытие для функций, выполняемых в тесте?

1 Ответ

0 голосов
/ 26 марта 2019

В случае, если кто-то еще сталкивается с подобной проблемой, я публикую свое решение

Я обнаружил, что это была проблема конфигурации библиотеки мокко.По умолчанию mocha ищет тестовые файлы в каталоге «test», но в моем случае выше тестовый файл находился в подкаталоге, поэтому он не выбирается mocha.

Я изменил конфигурацию mocha

от "test": "mocha --reporter dot" до "test": "mocha test / ** / *. js --reporter dot"

и проблема решена.

...