gpt4 book ai didi

unit-testing - Node.js 异步子进程测试

转载 作者:太空宇宙 更新时间:2023-11-03 22:39:17 24 4
gpt4 key购买 nike

我在 node.js 中迈出了第一步,并想测试我的代码,但我陷入了困境。我用node-qunit库作为测试工具。

这是我的代码:

var spawn = require('child_process').spawn;
var ok = require('assert').ok;

function _call_gpg(stdin_pass, passphrase, decrypt, callback) {
ok(stdin_pass);
ok(passphrase);

var buffers = [];
var gpg = spawn('gpg', ['--passphrase', passphrase, decrypt ? '-d' : '-c', '--no-use-agent']);

gpg.stdout.on('data', function(data) {
buffers.push(data);
});

gpg.on('exit', function(return_code) {
callback(return_code === 0 ? Buffer.concat(buffers) : undefined);
});

gpg.stdin.write(stdin_pass);
gpg.stdin.end();
}

function encrypt(string, passphrase, callback) {
ok(typeof callback === 'function');

_call_gpg(string, passphrase, false, function(buf) {
callback(buf && buf.toString('base64'));
});
}

function decrypt(encoded_string, passphrase, callback) {
ok(typeof callback === 'function');

raw_encoded_string = new Buffer(encoded_string, 'base64');
_call_gpg(raw_encoded_string, passphrase, true, function(buf) {
callback(buf && buf.toString('utf8'));
});
}

exports.encrypt = encrypt;
exports.decrypt = decrypt;

当我从交互式控制台调用此函数时,它们按预期工作。但是,当我尝试使用下面的代码异步测试它们时,第二个 strictEqual 有时有效,有时失败。

asyncTest('encrypting and decrypting', function() {

encrypt('foo', 'pass', function(encoded_string) {
decrypt(encoded_string, 'pass', function(decoded_string) {
strictEqual('foo', decoded_string, 'encryption and decryption work');
});
});

decrypt('jA0EAwMCNiwPDFiMxvFgyRmB4axFyanuy2DZmB0ZIUfpXcASCKT8pwFm', 'pass', function(decoded_string) {
strictEqual('foo', decoded_string, 'only decryption works');
});

setTimeout(function() { start(); }, 10000);
});

看起来问题出在异步上,因为当我单独测试这个函数时,它们都可以工作。

感谢您的帮助。

最佳答案

使用延迟计算而不是setTimeout:

asyncTest('encrypting and decrypting', function() {

encrypt('foo', 'pass', function(encoded_string)
{
decrypt(encoded_string, 'pass', function(decoded_string)
{
/* Call start() as part of the output */
strictEqual('foo', decoded_string, 'encryption and decryption work' && start() );
});
});

decrypt('jA0EAwMCNiwPDFiMxvFgyRmB4axFyanuy2DZmB0ZIUfpXcASCKT8pwFm', 'pass', function(decoded_string)
{
/* Do not call start() */
strictEqual('foo', decoded_string, 'only decryption works');
});

});

关于unit-testing - Node.js 异步子进程测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11497298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com