5.2.2 this를 조심하라
콜백 함수에서 this 변수를 참조할 때는 특별히 조심해야 한다. 전혀 엉뚱한 값을 참조할 수 있기 때문이다.
승현은 체크인을 마친 attendeeCollection의 attendee 객체 수를 세는 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); }); }); });