Тестирование на примере использования жасмина

Я новичок в Jasmine и тестирую в целом. Один блок моего кода проверяет, была ли создана моя библиотека с помощью нового оператора:

 //if 'this' isn't an instance of mylib...
 if (!(this instanceof mylib)) {
     //return a new instance
     return new mylib();   
 }

Как я могу проверить это с помощью Jasmine?

Ответы

Ответ 1

Жасмин использует сокеты для выполнения своих утверждений, поэтому вы можете написать свой собственный пользовательский макет, чтобы проверить все, что хотите, в том числе проверку экземпляра. https://github.com/pivotal/jasmine/wiki/Matchers

В частности, ознакомьтесь с разделом "Написание новых соответствий".

Ответ 2

Чтобы проверить, является ли что-то instanceof [Object], Жасмин теперь предоставляет jasmine.any:

it("matches any value", function() {
  expect({}).toEqual(jasmine.any(Object));
  expect(12).toEqual(jasmine.any(Number));
});

Ответ 3

Я предпочитаю более читаемый/интуитивный (по-моему) использовать с instanceof.

class Parent {}
class Child extends Parent {}

let c = new Child();

expect(c instanceof Child).toBeTruthy();
expect(c instanceof Parent).toBeTruthy();

Для полноты вы также можете использовать свойство prototype constructor в некоторых случаях.

expect(my_var_1.constructor).toBe(Array);
expect(my_var_2.constructor).toBe(Object);
expect(my_var_3.constructor).toBe(Error);

// ...

BEWARE, что это не сработает, если вам нужно проверить, унаследован ли объект от другого или нет.

class Parent {}
class Child extends Parent {}

let c = new Child();

console.log(c.constructor === Child); // prints "true"
console.log(c.constructor === Parent); // prints "false"

Если вам нужна поддержка наследования, определенно используйте оператор instanceof или функция jasmine.any(), например Roger предложил.

ссылка Object.prototype.constructor.