다음은 타깃 호출을 어드바이스로 감싸는 일이다. 즉, 일부 타깃 정보를 어드바이스에 전달해야 하는데, 내부에 원본 타깃 함수를 저장한 객체를 만들어 어드바이스에 넘기면 된다. 이 객체가 바로 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 - 끝’]); }); }); });