2015-03-25 3 views
1

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

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); 
    }); 
}); 

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

+0

Я на самом деле работаю в том же номер. Ждем ответа. –

+0

Я не буду использовать ваш метод, поскольку он вроде бы лишний, но он выглядит как хороший метод. – trysis

ответ

1

Я столкнулся с этой проблемой сегодня. То, как я установил это было по телефону поддельного метода вместо «SomeMethod» и обработок Params вернуть нужное значение возврата:

spyOn(SomeObj, "someMethod").and.callFake(function (property) { 
         if (property === "someValue") { 
          return "someReturnValue"; 
         } else if (property === "someOtherValue") { 
          return "someOtherReturnValue"; 
         } 
        }); 
+0

Это немного подробный и избыточный, но я полагаю, он мог бы работать в крайнем случае. – trysis

+0

С тем, что выходит из коробки с Жасмин, я не вижу другого способа сделать это, кроме того, что я предоставил. Я был бы признателен, если бы вы могли показать, как сделать его менее подробным и избыточным, чтобы увидеть другой вариант. Спасибо! –

+0

Я не знаю одного (кроме, очевидно, таких вещей, как триниальные выражения, которые сбивают с толку и часто неясны), я говорил, что я хотел бы :(. – trysis