test("length is 1", () => { expect(Promise).toHaveLength(1); }); describe("errors", () => { test("must be called as constructor", () => { expect(() => { Promise(); }).toThrowWithMessage(TypeError, "Promise constructor must be called with 'new'"); }); test("executor must be a function", () => { expect(() => { new Promise(); }).toThrowWithMessage(TypeError, "Promise executor must be a function"); }); }); describe("normal behavior", () => { test("returns a Promise object", () => { const promise = new Promise(() => {}); expect(promise).toBeInstanceOf(Promise); expect(typeof promise).toBe("object"); }); test("executor is called with resolve and reject functions", () => { let resolveFunction = null; let rejectFunction = null; new Promise((resolve, reject) => { resolveFunction = resolve; rejectFunction = reject; }); expect(typeof resolveFunction).toBe("function"); expect(typeof rejectFunction).toBe("function"); expect(resolveFunction).not.toBe(rejectFunction); }); });