예제 2-39 Aop.next의 테스트
소스 파일 2장\AOP\Aop_06_tests.js
Target = function() { var self = this; this.targetFn = function() { expect(this).toBe(self); }; }; /*** 이전 예제와 같은 코드 줄임 ***/ describe(‘Aop.next(context,targetInfo)’, function() { var advice = function(targetInfo) { return Aop.next.call(this,targetInfo); }; var originalFn; beforeEach(function() { originalFn = targetObj.targetFn; Aop.around(‘targetFn’,advice, targetObj); }); it(‘targetInfo.fn에 있는 함수를 호출한다’, function() { targetObj.targetFn(); expect(executionPoints).toEqual([‘targetFn’]); }); it(‘targetInfo.args에 인자를 전달한다’, function() { targetObj.targetFn(‘a’,‘b’); expect(argsToTarget).toEqual([‘a’,‘b’]); }); it(“targetInfo 함수에서 받은 값을 반환한다”, function() { var ret = targetObj.targetFn(); expect(ret).toEqual(targetFnReturn); }); it(‘주어진 콘텍스트에서 타깃 함수를 실행한다’, function() { var targetInstance = new Target(); var spyOnInstance = spyOn(targetInstance,‘targetFn’).and.callThrough(); Aop.around(‘targetFn’,advice,targetInstance); targetInstance.targetFn(); expect(spyOnInstance).toHaveBeenCalled(); }); });