s-error.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. describe('Error', function () {
  2. 'use strict';
  3. var supportsDescriptors = Object.defineProperty && (function () {
  4. try {
  5. var obj = {};
  6. Object.defineProperty(obj, 'x', { enumerable: false, value: obj });
  7. // eslint-disable-next-line no-unreachable-loop
  8. for (var _ in obj) { return false; } // jscs:ignore disallowUnusedVariables
  9. return obj.x === obj;
  10. } catch (e) { /* this is ES3 */
  11. return false;
  12. }
  13. }());
  14. var ifSupportsDescriptorsIt = supportsDescriptors ? it : xit;
  15. describe('#toString()', function () {
  16. it('stringifies a newed error properly', function () {
  17. var msg = 'test';
  18. var error = new RangeError(msg);
  19. expect(error.name).toBe('RangeError');
  20. expect(error.message).toBe(msg);
  21. expect(String(error)).toBe(error.name + ': ' + msg);
  22. });
  23. it('stringifies a thrown error properly', function () {
  24. var msg = 'test';
  25. var error;
  26. try {
  27. throw new RangeError(msg);
  28. } catch (e) {
  29. error = e;
  30. }
  31. expect(error.name).toBe('RangeError');
  32. expect(error.message).toBe(msg);
  33. expect(String(error)).toBe(error.name + ': ' + msg);
  34. });
  35. });
  36. describe('enumerability of prototype properties', function () {
  37. ifSupportsDescriptorsIt('#message', function () {
  38. expect(Object.prototype.propertyIsEnumerable.call(Error.prototype, 'message')).toBe(false);
  39. });
  40. ifSupportsDescriptorsIt('#name', function () {
  41. expect(Object.prototype.propertyIsEnumerable.call(Error.prototype, 'name')).toBe(false);
  42. });
  43. });
  44. });