Машинопись с проблемами глобального пространства имен Mocha / Chai / Sinon

Кто-нибудь знает правильный способ настроить тестирование с помощью ts-node в машинописи, чтобы Mocha, Chai и Sinon распознавались глобально без необходимости импорта вручную в каждый тестовый файл? У меня есть все определения типов, включенные в проект, в том числе мокко, синон, чай. У меня есть следующее (который работает и запускает тесты правильно):

mocha.opts:

--require ts-node/register
--option value spec/**/*.spec.ts
--require spec/bootstrap/test-setup.js
--recursive
--retries 0
--sort
--timeout 10000
--ui bdd

Тестовый скрипт в package.json:

"test": "yarn build && NODE_ENV=test nyc mocha ./spec/bootstrap/test-helper.js --opts ./spec/mocha.opts"

У меня есть 2 вспомогательных метода (которые по некоторым причинам я должен сделать в JS)

тест-setup.js:

require('mocha');
var chai = require('chai');
chai.use(require('chai-as-promised'));
chai.use(require('sinon-chai'));

global.expect = chai.expect;
global.Promise = require('bluebird');

тест-helper.js:

const sinon = require('sinon');
const _ = require('lodash');
const db = require('../../src/models');

before(() => {
  global.sandbox = sinon.sandbox.create();
});

afterEach(function () {
  global.sandbox.restore();
});

after(() => {
  db.default.sequelize.close();
});

Наконец, ненужная спецификация для тестирования:

describe('app', () => {
  const bar = {
    foo: () => 1,
  };

  it('asserts 1 === 1', () => {
    const stub = sandbox.stub(bar, 'foo').returns(3);
    const result = bar.foo();
    expect(result).to.eq(3);
    expect(stub).to.have.callCount(1);
    expect(1).to.eq(1);
  });

  it('tests stubs reset', () => {
    expect(bar.foo()).to.eq(1);
  });

});

Пара замечаний здесь:

  1. Это работает, он переносит и запускает тесты правильно. Если я удалю, казалось бы, бессмысленно require('mocha') показывает подсветку ошибок для it а также describe как хорошо, но опять все равно бежит.
  2. Единственная "проблема" - это подсветка ошибок и отсутствие автозаполнения для файлов sinon и chai в коде. Это очень близко к моей настройке теста в узле js, который работает на 100% нормально.

Вот что я вижу: Подсветка ошибочных ошибок

Но еще раз подчеркиваю, это работает, это просто кажется сомнительным, и я хотел бы выяснить, могу ли я A) сделать все это в TS, вместо того, чтобы иметь установочные файлы JS, и B) исправить неправильное выделение ошибок ts в этом сценарии.

0 ответов

Другие вопросы по тегам