نحوه استفاده از expect.objectContaining با Null و Undefined
اگر از Jest برای تست استفاده می کنید، احتمالاً با آن آشنا هستید expect
تابع و تطبیق های فراوان آن یکی از مفیدترین تطبیق ها این است expect.objectContaining()
، که به شما امکان می دهد بررسی کنید که آیا یک شی دارای مجموعه خاصی از ویژگی ها و انواع است یا خیر.
با این حال، یک محدودیت از expect.objectContaining()
این است که پشتیبانی نمی کند null
و undefined
ارزش های. این می تواند هنگام آزمایش کدی که ویژگی های اختیاری یا باطل شدنی را برمی گرداند ناامید کننده باشد.
من اخیراً با راهحلی برای این مشکل مواجه شدم expect.toBeOneOf()
تطبیق از کتابخانه شوخی. این تطبیق به شما امکان می دهد بررسی کنید که آیا یک مقدار با یکی از مقادیر مورد انتظار مطابقت دارد یا خیر null
و undefined
.
test("should not allow null or undefined", async () => {
const userType = expect.objectContaining({
id: expect.any(Number),
name: expect.any(String),
email: expect.any(String),
});
//! email cannot be null or undefined
expect({
id: 1,
name: "John Doe",
email: undefined,
}).toEqual(userType);
});
test("should allow null or undefined", async () => {
const userType = expect.objectContaining({
id: expect.any(Number),
name: expect.any(String),
// allow null and undefined
email: expect.toBeOneOf([expect.any(String), null, undefined]),
});
//> email can be null
expect({
id: 1,
name: "John Doe",
email: null,
}).toEqual(userType);
//> email can be undefined
expect({
id: 2,
name: "Jane Doe",
email: undefined,
}).toEqual(userType);
});
در این مثال، ما آزمایش می کنیم که آیا شی داده شده دارای مجموعه خاصی از ویژگی ها با انواع خاص است یا خیر. برای ویژگی ایمیل، ما استفاده می کنیم expect.toBeOneOf([expect.any(String), null, undefined])
اجازه دادن null
، undefined
یا الف string
به عنوان مقادیر ممکن
در اینجا نتیجه آزمایش دو مورد آزمایشی است. همانطور که انتظار می رفت، اولین مورد آزمایشی به دلیل عدم موفقیت undefined
ارزش ایمیل در مورد آزمایش دوم، هر دو null
و undefined
آزمون را به عنوان مقادیر معتبر قبول کنید.
من یک CodeSandBox آماده کردهام که به شما امکان میدهد آن را بهسرعت امتحان کنید، بدون اینکه مجبور باشید برای راهاندازی Jest زحمت بکشید:
CodeSandBox را امتحان کنید
امیدوارم این پست برای شما مفید بوده باشد. اگر سوال یا نظری دارید، در زیر آن را مطرح کنید. اگر می خواهید با من ارتباط برقرار کنید، می توانید من را در لینکدین یا گیت هاب پیدا کنید. با تشکر برای خواندن!