Jasmine: test instance type with jasmine.any()
While working on Fingers.js I needed to test a type of a certain value. It appears, that there’s a dedicated jasmine.any() matcher for this in Jasmine 2.0. Let’s see how it works:
1 2 3 4 5 6 7 8 9 |
<span style="color: #000000;"><strong>expect(12).toEqual(jasmine.any(Number));</strong> // <span style="color: #339966;"><strong>success </strong></span> <strong>expect(new Number(12)).toEqual(jasmine.any(Number));</strong> // <span style="color: #339966;"><strong>success </strong></span> <strong>expect("12").toEqual(jasmine.any(Number));</strong> // <span style="color: #ff0000;"><strong>failure</strong></span>, "12" is a String </span> |
Jasmine: toEqual vs toBe
Another observation is that jasmine.any() doesn’t work with .toBe() matcher (instead of toEqual). This is because .toEqual() compares objects values, while .toBe() checks for strict equality (===).
1 2 3 4 5 |
<span style="color: #000000;"><strong>expect({a: 123}).<span style="color: #ff6600;">toEqual</span>({a: 123});</strong></span> // <span style="color: #339966;"><strong>success</strong></span>, both objects are identical <span style="color: #000000;"><strong>expect({a: 123}).<span style="color: #3366ff;">toBe</span>({a: 123});</strong></span> // <span style="color: #ff0000;"><strong>failure</strong></span>, {a: 123} !== {a: 123} <span style="color: #000000;"><strong>var a = {a: 123};</strong> <strong>expect(a).<span style="color: #3366ff;">toBe</span>(a);</strong></span> // <span style="color: #339966;"><strong>success</strong></span>, a === a |
Consider following case:
1 2 |
<span style="color: #000000;"><strong>expect(7).<span style="color: #ff6600;">toEqual</span>(jasmine.any(Number));</strong></span> // <span style="color: #339966;"><strong>success </strong></span> |
1 |
<span style="color: #000000;"><strong>expect(7).<span style="color: #3366ff;">toBe</span>(jasmine.any(Number));</strong></span> // <span style="color: #ff0000;"><strong>failure</strong></span>, toBe() checks for strict equality |
Leave a Reply