2017-06-27 9 views
2

zurückgeben Ich spioniere eine JS-Methode. Ich möchte verschiedene Dinge zurückgeben, basierend auf tatsächlichen Argumenten für die Methode. Ich versuchte callFake und versuchte mit Argumenten [0] auf Argumente zuzugreifen, aber es sagt, dass Argumente [0] nicht definiert ist. Hier ist der Code -Jasmine Spy, um verschiedene Werte basierend auf Argument

spyOn(testService, 'testParam').and.callFake(function() { 
    var rValue = {}; 
    if(arguments[0].indexOf("foo") !== -1){ 
     return rValue; 
    } 
    else{ 
     return {1}; 
    } 
})   

Das hier vorgeschlagen wird - Any way to modify Jasmine spies based on arguments?

Aber es ist nicht für mich zu arbeiten. :(

Antwort

2

Verwendung von Argumenten sollte gut funktionieren. Auch auf Seite beachten Sie könnten Ihr gesamtes Objekt unter test- Paste obwohl das nicht die Ursache des Problems ist.

Hier ist, wie ich es benutzt. Sie dafür, in Aktion here

var testObj = { 
    'sample': "This is a sample string", 
    'methodUnderTest': function(param) { 
    console.log(param); 
    return param; 
    } 
}; 

testObj.methodUnderTest("You'll notice this string on console"); 

describe('dummy Test Suite', function() { 
    it('test param passed in', function() { 
    spyOn(testObj, 'methodUnderTest').and.callFake(function() { 
     var param = arguments[0]; 
     if (param === 5) { 
     return "five"; 
     } 
     return param; 
    }); 
    var val = testObj.methodUnderTest(5); 
    expect(val).toEqual('five'); 
    var message = "This string is not printed on console"; 
    val = testObj.methodUnderTest(message); 
    expect(val).toEqual(message); 
    }); 
}); 
Verwandte Themen