Я пытаюсь протестировать довольно простую функцию JavaScript в Jasmine, однако первый оператор выдает ошибку из-за того, что он не определен.
myClass.prototype.functiontoBeTested = function() {
var x = this.method()
...
}
Вышеприведенное выдает ошибку в Jasmine, поскольку method
не является функцией и не определено. Прототип изменен ранее, чтобы иметь этот метод, и из любопытства я назначил этот метод моему тестовому объекту в самой спецификации как таковой:
myObject.method = function(){return mockResults;};
Поэтому я решил вывести this
в консоль, и вместо того, чтобы быть моим объектом, я вижу Window {top: Window, location: Location, document: document, window: Window, external: Object…}
, что кажется неправильным. У меня была эта проблема раньше при тестировании функции в Jasmine, которая использовала this
, но просто изменила исходный код, чтобы ссылаться на объект по имени, поскольку функция была назначена чему-то внутри замыкания. В данном случае я не могу этого сделать, и мне любопытно, почему this
имеет в виду что-то неожиданное (по крайней мере, для меня).
Изменить: некоторые подробности о том, как выглядит тестовый пример в соответствии с запросом:
it("updates the control count", function(){
var mockResults = { ... };
myObject.method = function() {return mockResults;};
expect(myObject.method).not.toThrow();
});
Сейчас я просто пытаюсь заставить метод выполняться до завершения во время теста. Тестируемая функция обновляет текст в некоторых компонентах HTML, я буду работать над их проверкой, как только смогу заставить ее работать. Метод, вызывающий ошибку, находится в первой строке функции и является просто методом доступа к вызываемому объекту. В реальном исполнении var x = this.method()
работает без проблем. При тестировании в jasmine var x = this.method()
выдает ошибку, потому что method()
не определено для this
. Вместо того, чтобы this
ссылаться на вызывающий объект, он ссылается на окно. Это происходит не вживую, а только во время тестирования с Жасмин. Этот метод не определен, даже если я принудительно определяю его для тестового объекта непосредственно перед выполнением в тесте, как указано выше. Именно тогда я решил записать this
в консоль в исходном коде и понял, что это не относится к тому, на что я ожидал.
this
во время выполнения. - person Michael   schedule 12.06.2015toThrow
для своих модульных тестов. - person Michael   schedule 12.06.2015