I'm new to Jasmine and testing in general. One block of my code checks whether my library has been instantiated using the new operator:
//if 'this' isn't an instance of mylib... if (!(this instanceof mylib)) { //return a new instance return new mylib(); }
How can I test this using Jasmine?
Jasmine is a very popular JavaScript behavior-driven development (In BDD, you write tests before writing actual code) framework for unit testing JavaScript applications. It provides utilities that can be used to run automated tests for both synchronous and asynchronous code.
Jasmine supports testing async code. We can test async code with: describe("Using callbacks", function () { beforeEach(function (done) { setTimeout(function () { value = 0; done(); }, 1); }); it("supports sequential execution of async code", function (done) { value++; expect(value). toBeGreaterThan(0); done(); }); });
Jasmine provides the toBeInstanceOf
matcher.
it("matches any value", () => { expect(3).toBeInstanceOf(Number); });
To check if something is an instanceof [Object]
Jasmine provides jasmine.any
:
it("matches any value", function() { expect({}).toEqual(jasmine.any(Object)); expect(12).toEqual(jasmine.any(Number)); });
I do prefer the more readable/intuitive (in my opinion) use with the instanceof operator.
class Parent {} class Child extends Parent {} let c = new Child(); expect(c instanceof Child).toBeTruthy(); expect(c instanceof Parent).toBeTruthy();
For the sake of completeness you can also use the prototype constructor
property in some cases.
expect(my_var_1.constructor).toBe(Array); expect(my_var_2.constructor).toBe(Object); expect(my_var_3.constructor).toBe(Error); // ...
BEWARE that this won't work if you need to check whether an object inherited from another or not.
class Parent {} class Child extends Parent {} let c = new Child(); console.log(c.constructor === Child); // prints "true" console.log(c.constructor === Parent); // prints "false"
If you need inheritance support definitely use the instanceof
operator or the jasmine.any() function like Roger suggested.
Object.prototype.constructor reference.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With