더북(TheBook)

다음은 타깃 호출을 어드바이스로 감싸는 일이다. 즉, 일부 타깃 정보를 어드바이스에 전달해야 하는데, 내부에 원본 타깃 함수를 저장한 객체를 만들어 어드바이스에 넘기면 된다. 이 객체가 바로 targetInfo고 원본 타깃 함수는 fn 프로퍼티에 넣는다(예제 2-29).

예제 2-29 타깃 정보를 애스팩트에 전달하는지 테스트

소스 파일 2장\AOP\Aop_02_tests.js

describe(‘Aop’, function() {
var targetObj,
    executionPoints; // 실행 이벤트가 담긴 배열
 
beforeEach(function() {
  targetObj = {
    targetFn: function() {
      executionPoints.push(‘targetFn’);
    }
  };
  executionPoints = [];
});
 
describe(‘Aop.around(fnName, advice, targetObj)’, function() {
  it(‘타깃 함수 호출 시 어드바이스를 실행하도록 한다’, function() {
    // … 이전 예제와 같음 …
  });
 
  it(‘어드바이스가 타깃 호출을 래핑한다’, function() {
    var wrappingAdvice = function(targetInfo) {
      executionPoints.push(‘wrappingAdvice - 처음’);
      targetInfo.fn();
      executionPoints.push(‘wrappingAdvice - 끝’);
    };
 
    Aop.around(‘targetFn’, wrappingAdvice, targetObj);
    targetObj.targetFn();
    expect(executionPoints).toEqual(
      [‘wrappingAdvice - 처음’,‘targetFn’,‘wrappingAdvice - 끝’]);
  });
});
});

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.