null-or-undefined-access.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. test("null/undefined object", () => {
  2. [null, undefined].forEach(value => {
  3. let foo = value;
  4. expect(() => {
  5. foo.bar;
  6. }).toThrowWithMessage(TypeError, `Cannot access property "bar" on ${value} object "foo"`);
  7. expect(() => {
  8. foo.bar = 1;
  9. }).toThrowWithMessage(TypeError, `Cannot access property "bar" on ${value} object "foo"`);
  10. expect(() => {
  11. foo[0];
  12. }).toThrowWithMessage(TypeError, `Cannot access property "0" on ${value} object "foo"`);
  13. expect(() => {
  14. foo[0] = 1;
  15. }).toThrowWithMessage(TypeError, `Cannot access property "0" on ${value} object "foo"`);
  16. });
  17. });
  18. test("null/undefined object key", () => {
  19. [null, undefined].forEach(value => {
  20. let foo = { bar: value };
  21. expect(() => {
  22. foo.bar.baz;
  23. }).toThrowWithMessage(
  24. TypeError,
  25. `Cannot access property "baz" on ${value} object "foo.bar"`
  26. );
  27. expect(() => {
  28. foo.bar.baz = 1;
  29. }).toThrowWithMessage(
  30. TypeError,
  31. `Cannot access property "baz" on ${value} object "foo.bar"`
  32. );
  33. });
  34. });
  35. test("null/undefined array index", () => {
  36. [null, undefined].forEach(value => {
  37. let foo = [value];
  38. expect(() => {
  39. foo[0].bar;
  40. }).toThrowWithMessage(TypeError, `Cannot access property "bar" on ${value} object`);
  41. expect(() => {
  42. foo[0].bar = 1;
  43. }).toThrowWithMessage(TypeError, `Cannot access property "bar" on ${value} object`);
  44. });
  45. });