1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
test("length is 3", () => {
expect(Reflect.apply).toHaveLength(3);
});
describe("errors", () => {
test("target must be a function", () => {
[null, undefined, "foo", 123, NaN, Infinity, {}].forEach(value => {
expect(() => {
Reflect.apply(value);
}).toThrowWithMessage(TypeError, "First argument of Reflect.apply() must be a function");
});
});
test("arguments list must be an object", () => {
[null, undefined, "foo", 123, NaN, Infinity].forEach(value => {
expect(() => {
Reflect.apply(() => {}, undefined, value);
}).toThrowWithMessage(TypeError, "Arguments list must be an object");
});
});
});
describe("normal behavior", () => {
test("calling built-in functions", () => {
expect(Reflect.apply(String.prototype.charAt, "foo", [0])).toBe("f");
expect(Reflect.apply(Array.prototype.indexOf, ["hello", 123, "foo", "bar"], ["foo"])).toBe(2);
});
test("|this| argument is forwarded to called function", () => {
function Foo(foo) {
this.foo = foo;
}
var o = {};
expect(o.foo).toBeUndefined();
Reflect.apply(Foo, o, ["bar"]);
expect(o.foo).toBe("bar");
});
});
|