Использование типов объектов с помощью метода Tohavebeencalledwith от Jasmine
Я только начал использовать Jasmine поэтому, пожалуйста, простите вопрос новичка, но можно ли проверить типы объектов при использовании toHaveBeenCalledWith
?
expect(object.method).toHaveBeenCalledWith(instanceof String);
Я знаю, что могу это сделать, но он проверяет возвращаемое значение, а не аргумент.
expect(k instanceof namespace.Klass).toBeTruthy();
2 ответа:
toHaveBeenCalledWith
- Это метод шпион. Так что вы можете вызвать их только на шпиона, как описано в docs:// your class to test var Klass = function () { }; Klass.prototype.method = function (arg) { return arg; }; //the test describe("spy behavior", function() { it('should spy on an instance method of a Klass', function() { // create a new instance var obj = new Klass(); //spy on the method spyOn(obj, 'method'); //call the method with some arguments obj.method('foo argument'); //test the method was called with the arguments expect(obj.method).toHaveBeenCalledWith('foo argument'); //test that the instance of the last called argument is string expect(obj.method.mostRecentCall.args[0] instanceof String).toBeTruthy(); }); });
я обнаружил еще более крутой механизм, используя
jasmine.any()
, поскольку я нахожу, что разделение аргументов вручную является неоптимальным для разборчивости.В CoffeeScript:
obj = {} obj.method = (arg1, arg2) -> describe "callback", -> it "should be called with 'world' as second argument", -> spyOn(obj, 'method') obj.method('hello', 'world') expect(obj.method).toHaveBeenCalledWith(jasmine.any(String), 'world')