더북(TheBook)

5.2.2 this를 조심하라

콜백 함수에서 this 변수를 참조할 때는 특별히 조심해야 한다. 전혀 엉뚱한 값을 참조할 수 있기 때문이다.

승현은 체크인을 마친 attendeeCollectionattendee 객체 수를 세는 checkedInAttendeeCounter 모듈을 구현하려고 한다. checkInService와 크게 다를 바 없이 attendeeCollection.iterate에 표출할 함수를 넘기는 식으로 작성하면 된다. checkedInAttendeeCounter의 단위 테스트 코드를 먼저 작성하자(예제 5-8).

예제 5-8 checkedInAttendeeCounter 모듈의 단위 테스트

소스 파일 5장\Callbacks\checkedInAttendeeCounter_tests.js

describe(‘Conference.checkedInAttendeeCounter’, function() {
var counter;
 
beforeEach(function() {
  counter = Conference.checkedInAttendeeCounter();
});
describe(‘increment()’, function() {
  // increment 테스트
});
describe(‘getCount()’, function() {
  // getCount 테스트
});
describe(‘countIfCheckedIn(attendee)’, function() {
  var attendee;
 
  beforeEach(function() {
    attendee = Conference.attendee(‘태영’, ‘김’);
  });
 
  it(‘참가자가 체크인하지 않으면 인원수를 세지 않는다’, function() {
    counter.countIfCheckedIn(attendee);
    expect(counter.getCount()).toBe(0);
  });
 
  it(‘참가자가 체크인하면 인원수를 센다’, function() {
    attendee.checkIn();
      counter.countIfCheckedIn(attendee);
      expect(counter.getCount()).toBe(1);
  });
});
});

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