我正在创建单元测试,此测试包括使用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();
})
})
答案 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)