9

有谁知道在打字稿中使用 ts-node 设置测试的正确方法,以使 Mocha、Chai 和 Sinon 在全球范围内都得到认可,而无需在每个测试文件中手动导入?我有项目中包含的所有类型定义,包括 mocha、sinon、chai。我有以下内容(可以正常工作并运行测试):

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');

测试助手.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')的内容,它也会显示错误突出显示itdescribe但仍然会运行。
  2. 唯一的“问题”是 vs 代码中 sinon 和 chai 的错误突出显示和缺少自动完成。这与我在 node js 中的测试设置非常接近,可以 100% 正常工作。

这是我看到的: 错误突出显示

但我再次强调,这行得通,它只是让人觉得很奇怪,我想知道我是否可以 A)在 TS 中完成这一切,而不是让 JS 设置文件,以及 B)在这种情况下修复不正确的 ts 错误突出显示。

4

0 回答 0