jest test将返回值与hash的子集匹配 - 不能两次调用该函数?

时间:2017-10-15 18:14:45

标签: javascript jestjs

我希望将函数返回值的数据结构与更大的结构(即返回的结构"验证"针对更完整的哈希)进行匹配。我有一个使用toHaveProperty的工作测试,但我不必在我的测试中为这个特定问题定义我的对象结构。

我真正想要的东西是让我测试更大哈希中包含的结构(而不​​是值),并找不到两次调用该函数:

// ** this would fail if a property value is different **
test('thing returns something matching the structure within types', () => {
    expect(thing()).toBeDefined(
        expect(types).toMatchObject(thing())
    );
});

这里的结构:

var types = {
    changeSheet:{
        command: ["s", "sheet"],
        options: [],
        required: [],
        sheet_option: true,
    },
    checkIn:{
        command: ["in", "i"],
        options: ["-a", "--at"],
        required: [],
        sheet_option: false,
    },
    checkOut:{
        command: ["out", "o"],
        options: ["-a", "--at"],
        required: [],
        sheet_option: true,
    }
};

这是我想要测试的功能:

function thing() {
    return {changeSheet: {
        command: ["s", "sheet"],
        options: [],
        required: [],
        sheet_option: false,
    }};
}

注意changeSheet.sheet_option与返回值与'类型'不同。哈希值。是否有一个jest匹配机制来检查我的结构并忽略这些值,还是我坚持使用toHaveProperty()?

1 个答案:

答案 0 :(得分:2)

您可以使用Jest的expect(thing()).toMatchObject({ changeSheet: { command: expect.arrayContaining([ expect.any(String), expect.any(String) ]), options: expect.any(Array), required: expect.any(Array), sheet_option: expect.any(Boolean) } }); 匹配工具:http://facebook.github.io/jest/docs/en/expect.html#content

{{1}}

那就是说,你在这里测试的只是简单的结构/输入,通过使用类似TypeScript或Flow的静态类型检查器可以更好地完成。