[javascript] Jasmine의 spyOn을 사용하여 함수 호출 및 리턴 값을 확인하는 방법

Jasmine은 JavaScript 테스트 프레임워크로, 기능 테스트를 수행하고 결과를 확인하는 데 사용됩니다. spyOn 메소드는 Jasmine에서 제공하는 함수 감시 기능으로, 특정 함수가 호출되었는지, 호출 횟수, 인자 값 등을 확인할 수 있게 해줍니다. 이러한 함수 감시 기능을 사용하여 함수 호출 및 리턴 값을 Jasmine에서 테스트하는 방법에 대해 알아보겠습니다.

1. spyOn 기본 사용법

spyOn 함수를 사용하려면, 먼저 해당 함수가 속한 객체를 spyOn 함수의 인자로 전달해야 합니다. 예를 들어, 다음과 같은 JavaScript 객체가 있다고 가정해봅시다.

const calculator = {
  add: function(a, b) {
    return a + b;
  }
};

calculator 객체의 add 함수를 spyOn하여 호출할 때마다 감시할 수 있습니다.

describe('calculator', function() {
  it('should spy on the add function', function() {
    spyOn(calculator, 'add');
    calculator.add(2, 3);
    expect(calculator.add).toHaveBeenCalled();
  });
});

spyOn(calculator, 'add')를 호출하여 calculator 객체의 add 함수를 감시합니다. calculator.add 함수 호출 이후에 expect(calculator.add).toHaveBeenCalled()를 호출하여, add 함수가 호출되었는지 확인할 수 있습니다.

2. 반환 값 확인하기

spyOn 함수를 사용하여 함수가 호출되는 것을 확인할 수 있을 뿐만 아니라, 반환 값도 확인할 수 있습니다. 이를 위해서는 and.returnValue 메소드를 사용하면 됩니다. 예를 들어, 다음과 같이 add 함수가 항상 5를 반환하도록 설정해봅시다.

describe('calculator', function() {
  it('should spy on the add function and return a specific value', function() {
    spyOn(calculator, 'add').and.returnValue(5);
    var result = calculator.add(2, 3);
    expect(result).toBe(5);
  });
});

spyOn(calculator, 'add') 이후에 and.returnValue(5)를 호출하여 add 함수가 항상 5를 반환하도록 설정합니다. 그리고 calculator.add(2, 3)을 호출한 결과값을 result 변수에 저장한 후, expect(result).toBe(5)로 반환 값을 확인합니다.

3. 함수 호출 횟수 확인하기

spyOn을 사용하여 함수를 감시할 때, 해당 함수가 몇 번 호출되었는지 확인할 수도 있습니다. 이를 위해서는 toHaveBeenCalled 매처(matcher)를 사용하면 됩니다. 예를 들어, 다음과 같이 add 함수가 3번 호출되었는지 확인해봅시다.

describe('calculator', function() {
  it('should spy on the add function and check the call count', function() {
    spyOn(calculator, 'add');
    calculator.add(2, 3);
    calculator.add(4, 5);
    calculator.add(6, 7);
    expect(calculator.add).toHaveBeenCalledTimes(3);
  });
});

spyOn(calculator, 'add')를 호출하여 add 함수를 감시합니다. 그리고 calculator.add 함수를 3번 호출한 후, expect(calculator.add).toHaveBeenCalledTimes(3)add 함수가 3번 호출되었는지 확인합니다.

4. 함수 호출 시 인자 값 확인하기

spyOn을 사용하여 함수 호출을 감시할 때, 해당 함수가 호출될 때 전달되는 인자 값도 확인할 수 있습니다. 이를 위해서는 toHaveBeenCalledWith 매처를 사용하면 됩니다. 예를 들어, 다음과 같이 add 함수가 2와 3을 인자로 받는지 확인해봅시다.

describe('calculator', function() {
  it('should spy on the add function and check the arguments', function() {
    spyOn(calculator, 'add');
    calculator.add(2, 3);
    expect(calculator.add).toHaveBeenCalledWith(2, 3);
  });
});

spyOn(calculator, 'add')를 호출하여 add 함수를 감시합니다. 그리고 calculator.add(2, 3)을 호출한 후, expect(calculator.add).toHaveBeenCalledWith(2, 3)add 함수가 2와 3을 인자로 호출되었는지 확인합니다.

이렇게 Jasmine의 spyOn 메소드를 사용하여 함수 호출 및 반환 값을 확인하는 방법에 대해 알아보았습니다. spyOn을 사용하여 함수 호출 여부, 반환 값, 호출 횟수, 인자 값 등을 확인하여 테스트를 보다 간편하게 작성할 수 있습니다.

참고 자료