Javascript 使用Jest对节点红色中的自定义节点进行单元测试时发生setTimeout错误

Javascript 使用Jest对节点红色中的自定义节点进行单元测试时发生setTimeout错误,javascript,unit-testing,jestjs,node-red,Javascript,Unit Testing,Jestjs,Node Red,我注意到,一般来说,在Node RED中测试自定义节点并不是使用Jest完成的——我不认为有什么特别的原因,但这是我最熟悉的,所以我还是在尝试 我的测试设置看起来像 const n = require('../src/index.js'); describe('custom node', () => { const nodeType = 'custom node'; beforeAll(done => { helper.startServer(done); }

我注意到,一般来说,在Node RED中测试自定义节点并不是使用Jest完成的——我不认为有什么特别的原因,但这是我最熟悉的,所以我还是在尝试

我的测试设置看起来像

const n = require('../src/index.js');

describe('custom node', () => {
  const nodeType = 'custom node';

  beforeAll(done => {
    helper.startServer(done);
  });

  afterEach(() => {
    helper.unload();
  });

  afterAll(done => {
    helper.stopServer(done);
  });

  it('should be loaded', () =>
    new Promise((resolve, reject) => {
      const flow = [{ id: 'n1', type: nodeType, name: 'test name' }];

      helper.load(n, flow, () => {
        const n1 = helper.getNode('n1');
        try {
          expect(n1).toBeTruthy();
          expect(n1).toHaveProperty('name', 'test name');
          resolve();
        } catch (e) {
          reject(e);
        }
      });
    }));
});
产生的误差是

console.error node_modules/jest-jasmine2/build/jasmine/Env.js:289
      Unhandled error
    console.error node_modules/jest-jasmine2/build/jasmine/Env.js:290
      TypeError: setTimeout(...).unref is not a function
          at Immediate.<anonymous> (/dev/custom_nodes/node-red-contrib-x/node_modules/stoppable/lib/stoppable.js:43:39)
          at processImmediate (internal/timers.js:439:21)
          at process.topLevelDomainCallback (domain.js:126:23)
console.error节点_modules/jest-jasmine2/build/jasmine/Env.js:289
未处理错误
console.error节点_modules/jest-jasmine2/build/jasmine/Env.js:290
TypeError:setTimeout(…)。unref不是函数
马上。(/dev/custom_nodes/node-red-contrib-x/node_modules/stoppable/lib/stoppable.js:43:39)
在processImmediate(internal/timers.js:439:21)
在process.topLevelDomainCallback(domain.js:126:23)

解决方案非常简单:将Jest配置中的
testEnvironment
设置为
节点
,这样setTimeout就不会被Jest替换为不具有unref功能的设置

e、 g.in jest.config.js

module.exports = {
  testEnvironment: 'node',
};