2017-12-09 6 views
0

단위 테스트를 만들고 있는데,이 테스트는 프로필 (이름, 트윗 수, 추종자 수, 등록 날짜 등)의 데이터를 얻는 twitter API를 사용하여 구성됩니다. . 요점은이 작업을 위해 Mocha 라이브러리를 사용하고 있지만 문제가 발생하여 트위터 요청이 2 초 (모카의 기본 시간 제한)가 걸리므로 테스트가 항상 실패합니다. 누군가가 내게 손을 줄 수 있습니까? 트위터에 대한 요청의 모든 데이터를받은 후에 주장의 비교가 실행되도록하려면 어떻게해야합니까?모카 (Mocha)를 이용한 단위 테스트, 작동하지 못합니다.

code.js

class extractCode { 
    verificarUsername(a) { 
     if (a) { 
      var nombre; 
      var Twitter = require('twitter'); 
      var client = new Twitter({ 
       consumer_key: 'XSpj4nEB5IOLgIvyZXiDAhBLt', 
       consumer_secret: 'dPjYUTih6n0ynt1y9C7bE0g0gyx6KSJgrGTeDEa3yH5flsdJPL', 
       access_token_key: '900532686-4sOwDfOFZm1fKmtZZhSMPH04REXMjqnugTOn3o1j', 
       access_token_secret: 'ghNtHt7VyjwNHXvXnZM5hFKaDH62bX7LEFqUBZ9SSb5Lg' 
      }); 

      client.get('users/show', {screen_name: a}, function(error, response) { 
       if(error) throw error; 
       if(response.name) { 
       nombre = true 
       } else { 
       nombre = false 
       }; 
       console.log(` 
       Nombre: '${response.name}' 
       ID: ${response.id_str} 
       Localidad: ${response.location} 
       Descripción del perfil: ${response.description} 
       Seguidores: ${response.followers_count} 
       Sigue a: ${response.friends_count} 
       Perfil creado el: ${response.created_at}\n`); 
      }); 
      return nombre; 
     } 


    } 
} 

module.exports = extractCode; 

테스트/prueba.js

var assert = require('assert'); 
var extractCode = require('../code.js'); 

describe('Pruebas de perfil de Twitter', function() { 
    this.timeout(5000); 
    var c = new extractCode(); 
    it('Verifica si se le pasó un username válido', function(done) { 

      assert.equal(c.verificarUsername('pedrofumero'),true, 'El username proporcionado no es válido'); 
      done(); 



    }) 

}) 

답변

1

테스트 및 코드가 잘못 아마도 써드 파티 API 요청을 테스트 할 때이 아니 정말 시간 제한 값을 5 초입니다. 다른 제 3 자 api에 대한 요청에 1 분 이상 응답해야합니다. 여기

내가 할 수있는 방법

test.js

var assert = require('assert'); 
var extractCode = require('./code.js'); 
describe('Twitter profile', function() { 
    it('Twitter username verification, expect an actual response', function(done) { 
     var c = new extractCode(); 
     c.verificarUsername('pedrofumero') 
     .then(function(response){ 
      //console.log(response) 
      done() 
     }) 
     .catch(function(err){ 
      throw err; 
     }); 
    }) 
    it('Twitter username verification, expect an error response', function(done) { 
     var c = new extractCode(); 
     c.verificarUsername('') 
     .then(function(response){ 
      //console.log(response) 
      //assert.equal(response.verified,true,'Valid username'); 
     }) 
     .catch(function(err){ 
      assert.equal(err[0].message,'User not found.'); 
      done() 
     }); 
    }) 
    it('Twitter username verification, expect an verified profile', function(done) { 
     var c = new extractCode(); 
     c.verificarUsername('pedrofumero') 
     .then(function(response){ 
      assert.equal(response.verified,true,'Valid username'); 
      done(); 
     }) 
     .catch(function(err){ 
      done(err); 
     }); 
    }) 
}) 

code.js

var Twitter = require('twitter'); 
var client = new Twitter({ 
    consumer_key: '', 
    consumer_secret: '', 
    access_token_key: '', 
    access_token_secret: '' 
}); 
class extractCode { 
    verificarUsername(Username) { 
     return client.get('users/show', { screen_name: Username }) 
    } 
} 
module.exports = extractCode; 

출력

Twitter profile              
    √ Twitter username verification, expect an actual response (610ms) 
    √ Twitter username verification, expect an error response (391ms) 
    1) Twitter username verification, expect an verified profile  


2 passing (1s)              
1 failing               

1) Twitter profile             
    Twitter username verification, expect an verified profile:  

    AssertionError [ERR_ASSERTION]: Valid username     
    + expected - actual            

    -false               
    +true               

    at test.js:32:11             
    at <anonymous>             
    at process._tickCallback (internal/process/next_tick.js:188:7) 
+0

약속 코드를 재 작성 기본적인 접근 방법이다 기본적으로 2 초 변경합니다. mocha timeout? –

+1

@pedroFumero 'this.timeout (5000);에서했던 것처럼 mocha는 비동기 테스트에서'done()'호출을 기대하지 않으면 정의한 타임 아웃을 존중합니다. 시간 초과를 올릴 필요는 없습니다. – Gntem