2017-12-09 10 views
0

ユニットテストを作成しています。このテストはtwitter APIを使用して任意のプロファイル(名前、つぶやき、フォロワー、登録日など)のデータを取得し、 。要点は、私がこのタスクにMochaライブラリを使用しているということですが、アサーションを実行するとtwitterリクエストが2秒以上かかるため、テストは常に失敗します(Mochaのデフォルトタイムアウト)。誰かが私に手を差し伸べることができますか?私は何をしなければならないので、アサーションの比較は、Twitterのリクエストのすべてのデータを受け取った後に実行されますか?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要求をテストするときに、そのことは本当にタイムアウト値5Sです。私は他のサードパーティーの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

約束してあなたのコードを書き換える基本的なアプローチでありますデフォルトでmocha timeoutを2に変更しますか? –

+1

あなたのコード 'this.timeout(5000);で行ったように@PedroFumero;' mochaはあなたが非同期テストで 'done()'呼び出しを期待する場合に定義するタイムアウトを尊重します。タイムアウトを引き上げる必要はありません。 – Gntem

関連する問題