Тестирование на примере использования жасмина
Я новичок в 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.