예제 2-31 애스팩트의 다계층 사용이 가능한지 확인
소스 파일 2장\AOP\Aop_02_tests.js
it(‘마지막 어드바이스가 기존 어드바이스에 대해 실행되는 방식으로 체이닝할 수 있다’, function() { var adviceFactory = function(adviceID) { return (function(targetInfo) { executionPoints.push(‘wrappingAdvice - 처음 ‘ + adviceID); targetInfo.fn(); executionPoints.push(‘wrappingAdvice - 끝 ‘ + adviceID); }); }; Aop.around(‘targetFn’,adviceFactory(‘안쪽’), targetObj); Aop.around(‘targetFn’,adviceFactory(‘바깥쪽’), targetObj); targetObj.targetFn(); expect(executionPoints).toEqual([ ‘wrappingAdvice - 처음 바깥쪽’, ‘wrappingAdvice - 처음 안쪽’, ‘targetFn’, ‘wrappingAdvice - 끝 안쪽’, ‘wrappingAdvice - 끝 바깥쪽’]); });
테스트는 성공한다. 다음은 타깃에 인자를 넘기는 부분을 구현한다. 어드바이스는 아직 인자에 대해서는 아무것도 모른다. 어드바이스에 인자를 넘겨줘야 어드바이스도 계속 인자를 전달할 수 있다. 어드바이스가 포착한 targetInfo 객체에 args 프로퍼티를 간단히 하나 더 추가하면 된다. 다음과 같은 모습일 것이다.
{ fn: targetFunction, args: argumentsToPassToTarget }