Вернуть определенное значение только с определенными параметрами

В Жасмин, есть ли способ вернуть определенное значение из шпиона, только если оно было вызвано с определенными параметрами? Например, я могу иметь что-то вроде:

describe('my test', function() {
  beforeEach(function() {
    this.mySpy = jasmine.createSpy();

    // not sure how to do this, so this is pseudocode
    this.mySpy.and.returnValue(true).when.calledWith(false);
    this.mySpy.and.returnValue(false).when.calledWith(true);
  });

  it('returns true if called with false', function() {
    expect(this.mySpy(false)).toEqual(true);
  });

  it('returns false if called with true', function() {
    expect(this.mySpy(true)).toEqual(false);
  });
});

Я просмотрел документы, но не смог найти то, что хотел, и не смог найти ничего, связанного с поиском. Я понимаю, почему для этого не может быть причины - вы знаете, что вы называете, когда, и почему, и с какими параметрами, так зачем делать что-то более конкретное? В то же время это может привести к большему количеству кода, когда вы сможете точно указать, что вы хотите вернуть один раз, и вам не нужно будет указывать это снова.

1 ответ

Решение

Я столкнулся с этой же проблемой сегодня. Я исправил это, вызвав поддельный метод вместо "someMethod" и обработав параметры, чтобы вернуть желаемое возвращаемое значение:

spyOn(SomeObj, "someMethod").and.callFake(function (property ) {
                        if (property === "someValue") {
                            return "someReturnValue";
                        } else if (property === "someOtherValue") {
                            return "someOtherReturnValue";
                        }
                    });
Другие вопросы по тегам