使用Mocha进行单元测试,我无法使其正常工作

时间:2017-12-09 11:49:52

标签: node.js mocha

我正在创建单元测试,此测试包括使用twitter API获取任何配置文件的数据(名称,推文数量,关注者,注册日期等)。关键是我正在使用Mocha库来完成这项任务,但我遇到了问题,即在执行断言时,twitter请求需要2秒以上(Mocha的默认超时),因此我的测试总是失败。有人可以帮我一把吗?我应该怎么做,以便在收到Twitter请求的所有数据后执行assert的比较?

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 个答案:

答案 0 :(得分:1)

你的测试和代码是错误的,在测试第三方api请求时,它可能不是真正的超时值。我已经向其他第三方api请求了超过一分钟的时间来回复。

这是使用promises重写代码的基本方法

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)