phy*_*boy 4 javascript arrays testing jestjs
我见过这个问题的不同解决方案的实现,但是,似乎没有一个对我有用。
假设我有一个对象数组(长度为 6),其中包含具有以下结构的唯一数据:
{
first_name,
last_name,
age,
dob,
address_1,
postal_code
}
Run Code Online (Sandbox Code Playgroud)
如果此数组包含另一个对象数组的部分元素(其对象的结构稍短),我将如何比较:
{
first_name,
last_name,
age
}
Run Code Online (Sandbox Code Playgroud)
我知道如果我要比较单个项目我可以使用类似的东西:
expect(response[i]).toMatchObject(expected[i]);
Run Code Online (Sandbox Code Playgroud)
但是我不确定如何比较完整数组......
我见过这样的事情:
expect(state).toEqual(
expect.arrayContaining([
expect.objectContaining({
type: 'END'
})
])
)
Run Code Online (Sandbox Code Playgroud)
但我无法让它发挥作用。
您可以使用.toMatchObject(object)方法,如文档所述:
\n\n\n\n\n您还可以传递对象数组,在这种情况下,仅当接收到的数组中的每个对象与预期数组中的相应对象匹配(在上述 toMatchObject 意义上)时,该方法才会返回 true。
\n
您还可以使用Expect.arrayContaining(array),如文档所述:
\n\n\n\n\n也就是说,预期数组是接收数组的子集。因此,它匹配接收到的数组,其中包含不在预期数组中的元素。
\n
import faker from \'faker\';\n\ndescribe(\'test suites\', () => {\n it(\'should contains\', () => {\n const state = new Array(6).fill(null).map(() => ({\n first_name: faker.name.firstName(),\n last_name: faker.name.lastName(),\n age: faker.random.number({ min: 0, max: 100 }),\n dob: \'c\',\n address_1: faker.address.city(),\n postal_code: faker.address.zipCode()\n }));\n\n const matchObj = new Array(state.length).fill(null).map((_, idx) => {\n const item = state[idx];\n const stateSlice = {\n first_name: item.first_name,\n last_name: item.last_name,\n age: item.age\n };\n return stateSlice;\n });\n expect(matchObj).toEqual(\n expect.arrayContaining([\n expect.objectContaining({\n first_name: expect.any(String),\n last_name: expect.any(String),\n age: expect.any(Number)\n })\n ])\n );\n expect(state).toMatchObject(matchObj);\n expect(state).toEqual(\n expect.arrayContaining([\n expect.objectContaining({\n first_name: expect.any(String),\n last_name: expect.any(String),\n age: expect.any(Number)\n })\n ])\n );\n });\n});\nRun Code Online (Sandbox Code Playgroud)\n\n单元测试结果:
\n\nPASS src/stackoverflow/58238433/index.spec.ts (9.564s)\n test suites\n \xe2\x9c\x93 should contains (8ms)\n\nTest Suites: 1 passed, 1 total\nTests: 1 passed, 1 total\nSnapshots: 0 total\nTime: 10.779s\nRun Code Online (Sandbox Code Playgroud)\n