@TempUserMain

Проверка соответсвия объекта классу в Jasmine \\?

В JSTestDriver имеется метод assertInstanceOf(), используемый для проверки соответсвия объекта указанному классу.

Подскажите, пожалуйста, как сделать ананлогичную проверку в Jasmine ?

Забегая вперед, в Jasmine имеется проверка типа:
expect(someObject.Method).toHaveBeenCalledWith(jasmine.any(String));

Тем не менее, при попытке сравнить экземпляр класса и класс:
expect(someObject).toHaveBeenCalledWith(jasmine.any(objectMain));

выдается ошибка:
Error: Expected a spy, but got { <поля класса> }.
Помимо этого, есть custom_matcher.js, но не могу разобраться, как, применяя его, сделать проверку.

UPD:

Благодарю за ответ.

Только недавно смог вернуться к написанию данного matcher'а.

Прочитал про создание собственных matcher'ов.

Если верно понял, то в приведенном листинге код корректный. Тем не менее, при использовании:

function forCheck() {
        tempVar = 0;
    }

    var objectTemp = new forCheck();

    describe('DeferredJasmine', function(){

        beforeEach(function() {
            this.addMatchers({
                toBeInstanceOf: function(expectedInstance) {
                    var actual = this.actual;
                    var notText = this.isNot ? " not" : "";
                    this.message = function() {
                        return "Expected " + actual.constructor.name + notText + " is instance of " + expectedInstance.name;
                    };
                    return actual instanceof expectedInstance;
                }
            });
        });

        it("checks type name", function() {
            expect(objectTemp).toBeInstanceOf(forCheck);
        });

Отображается ошибка:
"TypeError: undefined is not a function at Object.
TypeError: undefined is not a function at Object. "

Первая ошибка указывает на "this.addMatchers", вторая на "toBeInstanceOf(objectTempDub)"

Тем не менее, если использовать просто:
it("checks type name", function() {
    expect(objectTemp instanceof forCheck).toBe(true);
}

то проверка проходит.

Подскажите, пожалуйста, в чем причина ошибка?

UPD_2:

Исправил код в первом UPD.

Уже использую короткий вариант
expect(objectTemp instanceof forCheck).toBe(true);
но интересна причина ошибки в первоначальном варианте.
  • Вопрос задан
  • 2822 просмотра
Пригласить эксперта
Ответы на вопрос 1
xamd
@xamd
javascript-ninja
Напишите свой маленький матчер:

beforeEach(function() {
	this.addMatchers({
	    toBeInstanceOf: function(expectedInstance) {
	    	var actual = this.actual;
	    	var notText = this.isNot ? " not" : "";
	    	this.message = function() {
	    		return "Expected " + actual.constructor.name + notText + " is instance of " + expectedInstance.name;
	    	};
	    	return actual instanceof expectedInstance;
	    }		
	});
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы