动态异步摩卡测试

时间:2019-06-19 16:05:44

标签: javascript unit-testing testing mocha

我有一个service类,另外50个“服务”也有扩展。每个服务都有自己的测试,但是我想为所有服务共享功能编写一个测试套件(我有一个方法thing,每个服务都必须实现)。

要测试thing,每个服务还具有函数thingConfig,该函数返回可以运行的配置thing数组。我想执行以下操作:

describe('service', () => {
  let configs;
  before(async () => configs = await service.thingConfig())

  configs.forEach(config => {
    it(config.name + ' should run thing', () => {
      thing = await service.thing(config);
      expect(thing).to....
    });
  });
})

是否可以基于异步数据进行此动态测试(forEach)?

1 个答案:

答案 0 :(得分:1)

要使其正常工作,您必须制作一些虚拟的外壳。

看下面的例子:

describe('Dummy spec', () => {
    before(async () => {
        const configs = await service.thingConfig();
        describe('Generated spec', () => {
            configs.forEach((config) => {
                it(`Test for config: ${config}`, async () => {
                    const thing = await service.thing(config);
                    expect(thing).to....
                });
            });
        });
    });

    it('Dummy test case, so before is executed', () => assert.strictEqual(1, 1));
});

假设一切顺利,您应该以以下形式查看结果:

  Dummy spec
    √ Dummy test case, so before is executed

  Generated spec
    √ Test for config: test1
    √ Test for config: test2
    √ Test for config: test3
    √ Test for config: test4


  5 passing (3s)