2016-10-01 4 views
10

jasmine-node를 사용하여 노드 서버에서 API 끝점 뒤에 컨트롤러 로직을 테스트하고 있습니다.jasmine-node 테스트에서 오류 분기를 강제하는 방법

다음
var getSummary = function(req, res) { 
    var playerId = req.params.playerId; 

    db.players.getAccountSummary(playerId, function(err, summary) { 
    if (err) { 
     logger.warn('Error while retrieving summary for player %d.', playerId, err); 
     return res.status(500).json({ 
     message: err.message || 'Error while retrieving summary.', 
     success: false 
     }); 
    } else { 
     res.json({success: true, summary: summary}); 
    } 
    }); 
}; 

내가 성공적으로 else 블록을 테스트하는 방법은 다음과 같습니다 : 다음은이 컨트롤러 로직은 일반적으로 모습입니다

describe('GET /api/players/:playerId/summary', function() { 
    it('should return an object summarizing the player account', function(done) { 
    request 
     .get('/api/players/' + playerId + '/summary') 
     .set('Content-Type', 'application/json') 
     .set('cookie', cookie) 
     .expect(200) 
     .expect('Content-Type', /json/) 
     .end(function(err, res) { 
     expect(err).toBeNull(err ? err.message : null); 
     expect(res.body.success).toBe(true); 
     expect(res.body.summary).toBeDefined(); 
     done(); 
     }); 
    }); 
}); 

이 잘 작동하지만 if 블록이 가난한 지점의 적용 범위 나 잎 테스트하지 않았다. 내 질문은, 테스트에서 오류 블록을 실행하려면 어떻게해야합니까? 올바른 경고가 기록되고 올바른 데이터가 전달되었는지 테스트 할 수 있도록 오류를 반환하도록 설정된 응답을 조롱 할 수 있습니까?

+0

참조 http://stackoverflow.com/questions/8408033/use-jasmine-to-stub-js-callbacks-based-on-argument- ([이용 쟈스민 인수 값에 기초 JS 콜백 스터브] 값). 당신이하려고하는 트릭은'모의 (mock) '를 만드는 것입니다. –

답변

1

테스트에 따라 다릅니다. 단위 테스트 만 원하는 경우 스파이가 길입니다. db 응답을 스텁 할 수 있습니다. 이 경우 데이터베이스는 호출되지 않습니다. 방금 시뮬레이션되었습니다. 당신이 기능/통합 테스트를 원하는 경우

const db = require('./yourDbModel'); 
spyOn(db.players, 'getAccountSummary').and.callFake(function(id, cb) { 
    cb(new Error('database error'); 
}); 

request 
    .get('/api/players/' + playerId + '/summary') 
    .set('Content-Type', 'application/json') 
    .set('cookie', cookie) 
    .expect(500) 
    // ... 

, 당신은 예를 들어, 잘못된 데이터를 단순히 데이터베이스에 존재하지 않는 플레이어 ID를 요청을 호출해야합니다.

request 
    .get('/api/players/i_am_no_player/summary') 
    .set('Content-Type', 'application/json') 
    .set('cookie', cookie) 
    .expect(500) 
    // ...