javascript - 如何嵌套 Jest 测试

标签 javascript jestjs

我有一种情况,我需要创建一个调用函数并检查其返回值的测试。它返回一个对象,所以我必须遍历它并检查 100 个左右的值是否正确。如果其中一个失败了,我想知道是哪一个。
我无法弄清楚如何使用 vanilla Jest 执行此操作,以便测试是独立的,并且我会在失败时收到有意义的错误消息。
例如,我可以这样做:(伪代码来说明,不是实际代码)

describe('Test for function A', () => {
    beforeAll('Create class instance', () => {
        this.inst = new MyClass();
    });

    test('Call function with no parameters', () => {
        const value = this.inst.run();

        for (each key=value) {
            expect(value).toBe(correct); // on failure, doesn't tell me the key, only the value
        }
    });
});
问题在于,如果 value不是 correct那么错误消息不是很有帮助,因为它没有告诉我 100 个值中的哪个有问题。
我无法更改为 test.each()因为那时我得到一个错误,说我已经嵌套了 test()不允许的电话。
如果我使用内部 test()并更改父 test()describe()然后代码变成这样:
describe('Test for function A', () => {
    beforeAll('Create class instance', () => {
        this.inst = new MyClass();
    });

    describe('Call function with no parameters', () => {
        const value = this.inst.run();

        for (each value) {
            test(`Checking ${value.name}`, () => {
                expect(value).toBe(correct);
            });
        }
    });
});
这会给我一个详细的错误消息,除了 this.inst.run()在测试设置期间调用,在 this.inst 之前已由 beforeAll() 设置,所以它失败了。 (Jest 首先运行所有 describe() block ,然后是 beforeAll() ,然后是 test()。这意味着我首先在 this.inst.run() block 中调用 describe(),然后 beforeAll() block 创建类实例。)
有什么方法可以实现吗?有一个测试需要在所有子测试之间创建和共享一个对象,一个调用函数来获取该组数据的测试组,然后是组内的一堆测试?

最佳答案

可以,按照describe的执行顺序是可以的和 test block :

describe("Test for function A", () => {
  this.inst = new MyClass();
  afterAll("Create class instance", () => { //--> use this instead of beforeAll
    this.inst = new MyClass();
  });

  test("Should be defined", () => {
    //--> at least one test inside describe
    expect(inst).toBeTruthy();
  });

  describe("Call function with no parameters", () => {
    const value = this.inst.run();

    test("Should be defined", () => {
      //--> at least one test inside describe
      expect(value).toBeTruthy();
    });

    for (/*...each value */) {
      test(`Checking ${value.name}`, () => {
        expect(value).toBe(correct);
      });
    }
  });
});

关于javascript - 如何嵌套 Jest 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66453658/

相关文章:

javascript - document.getElementById 不起作用

javascript - 使用 couchDB 复制 pouchDB 文档

javascript - 布伦特里信用卡支付按钮不显示

jestjs - Jest 如何断言该函数未被调用

javascript - 无法使用 Jest 对具有选择器功能的 redux-saga 进行单元测试

javascript - 使用 Enzyme 和 Jest 无法通过 'li' 中没有 'ul' 的测试

javascript - Vue - 如何获取绑定(bind)到计算属性的文档/窗口属性?

javascript - 单击按钮时如何运行 JavaScript 函数

reactjs - React 功能组件 Api 调用的 Jest Unit 测试用例

javascript - 使用 Jest 测试 Redux 和 Axios 获取中间件