Проблемы с методом Жасмина spyOn toHaveBeenCalled - PullRequest
1 голос
/ 22 февраля 2012

Может кто-нибудь сказать мне, почему следующий тест не проходит.

var Person = function() {};

Person.prototype.helloSomeone = function(toGreet) {
  return this.sayHello() + " " + toGreet;
};

Person.prototype.sayHello = function() {
  return "Hello";
};

describe("Person", function() {
 it("calls the sayHello() function", function() {
   var fakePerson = new Person();
   spyOn(fakePerson, "sayHello");
   fakePerson.helloSomeone("world");
   expect(fakePerson.sayHello).toHaveBeenCalled();
  });
});

Я взял это из здесь , и он сказал, что это работает. Я вижу, что метод spyOn создает одноименную функцию-обертку для объекта person, т.е. вызывается fakePerson.sayHello для объекта, а не для прототипа.

Большое спасибо

Ответы [ 2 ]

8 голосов
/ 06 марта 2012

Тесты не пройдены, потому что я также использовал jasmine-sinon.js.

4 голосов
/ 22 февраля 2012

Одна из возможных проблем с вашими тестами состоит в том, что вы не указали, что должен вызываться оригинальный метод.Правильное поведение будет следующим (обратите внимание на «andCallThrough»):

describe("Person", function() {
 it("calls the sayHello() function", function() {
   var fakePerson = new Person();
   spyOn(fakePerson, "sayHello").andCallThrough();
   fakePerson.helloSomeone("world");
   expect(fakePerson.sayHello).toHaveBeenCalled();
  });
});

Вы можете увидеть страницу документации Jasmine для получения дополнительной информации о другой возможности: https://github.com/pivotal/jasmine/wiki/Spies

Редактировать: Быстрый просмотр документации Жасмин-Синон вызывает следующее:

Предупреждение

Жасмин-Синон в настоящее время перезаписывает любые сопоставители Жасмин с тем же именем, используемые для его собственных шпионских функций.Я планирую разрешить их дальнейшее сохранение в будущем.

Переписаны собственные средства сопоставления с жасмином:

  • toHaveBeenCalled()
  • toHaveBeenCalledWith ()

Если вы хотите использовать Jasmine-Sinon, вы должныиспользуйте их API, а не Jasmine.

Редактировать : По состоянию на Фев 2012 :

Вы также можетеиспользуйте шпионов Жасмин рядом с вашими шпионами Синона.Jasmine-Sinon определит, что вы используете, и использует соответствующий механизм сопоставления.

...