Jasmine spyOn with specific arguments

43,915

Solution 1

You can use callFake:

spyOn($cookieStore,'get').and.callFake(function(arg) {
    if (arg === 'someValue'){
        return 'someabc';
    } else if(arg === 'anotherValue') {
        return 'anotherabc';
    }
});

Solution 2

To the ones using versions 3 and above of jasmine, you can achieve this by using a syntax similar to sinon stubs:

spyOn(componentInstance, 'myFunction')
      .withArgs(myArg1).and.returnValue(myReturnObj1)
      .withArgs(myArg2).and.returnValue(myReturnObj2);

details in: https://jasmine.github.io/api/edge/Spy#withArgs

Share:
43,915
eeejay
Author by

eeejay

Updated on December 23, 2021

Comments

  • eeejay
    eeejay over 2 years

    Suppose I have

    spyOn($cookieStore,'get').and.returnValue('abc');
    

    This is too general for my use case. Anytime we call

    $cookieStore.get('someValue') -->  returns 'abc'
    $cookieStore.get('anotherValue') -->  returns 'abc'
    

    I want to setup a spyOn so I get different returns based on the argument:

    $cookieStore.get('someValue') -->  returns 'someabc'
    $cookieStore.get('anotherValue') -->  returns 'anotherabc'
    

    Any suggestions?