Не может получить jasmine.any(Function) для работы
Я создал полный упрощенный пример, который реплицирует проблему, которую я получаю.
function TestObj() {
var self = this;
self.getStuff = function(aString, callback) {
// TODO
}
}
describe("server communications", function() {
it("it calls the server", function() {
var obj = new TestObj();
obj.getStuff = jasmine.createSpy();
// swap the above line for this and it makes no difference
// spyOn(obj, "getStuff");
var functionVar = function() {
};
obj.getStuff("hello", functionVar);
expect(obj.getStuff).toHaveBeenCalledWith(
[ "hello", jasmine.any(Function) ]);
});
});
Вместо прогона unit test, я получаю следующий вывод:
Ожидаемый шпион, с которым были вызваны: [['hello', < jasmine.any(function Function() {[собственный код]}) > ]] но был вызван с: [['hello', Function]]
Почему это не признает, что функции, которые я передаю (функция() {}), фактически являются функциями? Что это за собственный код, который он ожидает? У кого-нибудь еще была проблема с jasmine.any(Function)? Thankyou!
EDITED
Я попытался использовать spyOn вместо jasmine.createSpy(), и это не имеет никакого значения. Я попробовал только один аргумент, и он работает. Ввод первого аргумента строки разбивает jasmine.any(Function) - любые идеи?
Ответы
Ответ 1
А, я думал, что вам нужно приложить аргументы expect().toHaveBeenCalledWith
в Array[]
. Дурак я. Вот рабочая версия:
function TestObj() {
var self = this;
self.getStuff = function(aString, callback) {
// TODO
}
}
describe("server communications", function() {
it("it calls the server", function() {
var obj = new TestObj();
obj.getStuff = jasmine.createSpy();
// swap the above line for this and it makes no difference
// spyOn(obj, "getStuff");
var functionVar = function() {
};
obj.getStuff("hello", functionVar);
expect(obj.getStuff).toHaveBeenCalledWith("hello", jasmine.any(Function));
});
});
Ответ 2
Проблема заключается в том, как вы создаете своего шпиона, использование spyOn
похоже на работу, как ожидалось:
describe("test", function() {
return it("is function", function() {
var a = {b: function(){}};
spyOn(a, 'b');
a.b(function(){});
expect(a.b).toHaveBeenCalledWith(jasmine.any(Function));
});
});
Вы также можете написать свой собственный Matcher, чтобы проверить, является ли переданное значение функцией:
describe('test',function(){
it('is function',function(){
this.addMatchers({
isFunction: function() {
return typeof this.actual === 'function';
}
});
expect(function(){}).isFunction();
});
});
EDITED: кодифицировал первый фрагмент кода