반응형
인수를 기반으로 재스민 스파이를 수정하는 방법은 무엇입니까?
다른 매개 변수를 사용하여 외부 API 메서드를 두 번 호출하는 테스트하려는 함수가 있습니다. Jasmine 스파이 로이 외부 API를 조롱하고 매개 변수에 따라 다른 것을 반환하고 싶습니다. Jasmine에서 이것을 할 수있는 방법이 있습니까? 내가 생각해 낼 수있는 최선은 andCallFake를 사용하는 해킹입니다.
var functionToTest = function() {
var userName = externalApi.get('abc');
var userId = externalApi.get('123');
};
describe('my fn', function() {
it('gets user name and ID', function() {
spyOn(externalApi, 'get').andCallFake(function(myParam) {
if (myParam == 'abc') {
return 'Jane';
} else if (myParam == '123') {
return 98765;
}
});
});
});
Jasmine 버전 3.0 이상에서는 withArgs
describe('my fn', function() {
it('gets user name and ID', function() {
spyOn(externalApi, 'get')
.withArgs('abc').and.returnValue('Jane')
.withArgs('123').and.returnValue(98765);
});
});
3.0 이전의 Jasmine 버전 callFake
은 올바른 방법이지만 객체를 사용하여 반환 값을 유지하여 단순화 할 수 있습니다
describe('my fn', function() {
var params = {
'abc': 'Jane',
'123': 98765
}
it('gets user name and ID', function() {
spyOn(externalApi, 'get').and.callFake(function(myParam) {
return params[myParam]
});
});
});
Jasmine 버전에 따라 구문이 약간 다릅니다.
- 1.3.1 :
.andCallFake(fn)
- 2.0 :
.and.callFake(fn)
자원:
$provide
스파이를 만드는 데 사용할 수도 있습니다 . 그리고 매개 변수가 지정된 데이터를 전달 하는 and.returnValues
대신 사용하여 조롱하십시오 and.returnValue
.
Jasmine 문서에 따르면 : 스파이를로 연결하면
and.returnValues
함수에 대한 모든 호출이 반환 값 목록의 끝에 도달 할 때까지 특정 값을 순서대로 반환하며,이 시점에서 이후의 모든 호출에 대해 정의되지 않은 값이 반환됩니다.
describe('my fn', () => {
beforeEach(module($provide => {
$provide.value('externalApi', jasmine.createSpyObj('externalApi', ['get']));
}));
it('get userName and Id', inject((externalApi) => {
// Given
externalApi.get.and.returnValues('abc','123');
// When
//insert your condition
// Then
// insert the expectation
}));
});
참고 URL : https://stackoverflow.com/questions/16198353/any-way-to-modify-jasmine-spies-based-on-arguments
반응형
'development' 카테고리의 다른 글
실제 파일에서 MySQL 데이터베이스 복원 (0) | 2020.07.08 |
---|---|
생성자 인수가 너무 많습니까? (0) | 2020.07.08 |
바이너리 릴리스와 소스 릴리스의 차이점은 무엇입니까? (0) | 2020.07.08 |
Git Stash Pop 폐기 (0) | 2020.07.08 |
Angular 2에서 $ compile에 해당 (0) | 2020.07.08 |