더북(TheBook)

예제 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();
});
});

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