2

私はモカでテストしたいこの機能を持っています:

exports.readFile = readFile;
function readFile(filepath, startOffset, outputStream){
    var fileSize = fs.statSync(filepath).size;
    var length = fileSize - startOffset;
    console.log(startOffset);
    fs.createReadStream(filepath, 
                    {start: startOffset, end: fileSize}
                                       ).pipe(outputStream);
}

次のコードを使用して機能をテストします。

var edp = require("edp.js");
    var Buffered = require("buffered-stream");
    var sampleData = 'A small test.';
fs.writeFileSync('./test.txt', sampleData);

var filedata = '';
var smallBufferedStream = new Buffered(20);
smallBufferedStream.on("data", function(data){
        filedata += data;
});

describe('File content redirection', function(){
    describe('reading small file from byte 0', function(){
        it('data should be equal', function(done){
                filedata = '';
                edp.readFile('./test.txt', 0, smallBufferedStream);
                smallBufferedStream.once('end', function(){
                    //sampleData value is "A small test.
                    assert.equal(filedata, sampleData);
                    done();
                });
        });
    });
    describe('reading small file from byte 8', function(){
        it('data should be equal', function(done){
                filedata = '';
                edp.readFile('./test.txt', 8, smallBufferedStream);
                smallBufferedStream.once('end', function(){
                    //sampleData value here is "A small test. 
                    //It should be 'test.'
                    assert.equal(filedata, sampleData.substr(8));
                    done();
                });
        });
    });
});

mocha コマンドを実行すると、次の情報が得られます。

 0
․8
․

✖ 1 of 2 tests failed:

1) File content redirection reading small file from byte 8 data should be equal:

  actual expected

  A small test.

編集:問題は、テスト間でリセットされない smallBufferedStream に起因します

これはモカでのみ発生します(外部プログラムでテストを行ったところ、これは機能します)。

mocha 内で呼び出すたびに、バッファリングされたストリームに新しいストリームを強制的にリセットするにはどうすればよいですか?

4

2 に答える 2

0

これが最善の方法であるかどうかはわかりませんが、関数の非同期呼び出しに問題があるように思われることが最終的にわかりました。

次のようにコードを複製する問題を解決しました。

describe('reading small file from byte 8', function(){
    it('data should be equal', function(done){
            var smallBufferedStream = new Buffered(20);
            var filedata = '';
            smallBufferedStream.on("data", function(data){
                    filedata += data;
            });
            var fd = edp.readFile(smallTestFile, 8, smallBufferedStream);
            smallBufferedStream.once('end', function(){
                assert.equal(filedata, sampleData.substr(1));

                done();
            });
    });
});

テストする必要がある値で 8 を置き換えます。

于 2013-04-29T13:38:17.437 に答える
0

mocha で beforeEach を使用して、各テスト間ですべてのデータをリセットできます。したがって、上記のコードは次のようにすることで機能するはずです。

//Have to initialize these here so they are in scope in the describe functions. 
var filedata = null; 
var smallBufferedStream = null;
describe('File content redirection', function(){
    beforeEach(function(done) {
        filedata = '';
        smallBufferedStream = new Buffered(20);
        smallBufferedStream.on("data", function(data){
            filedata += data;
        });
        done()
    });
    describe('reading small file from byte 0', function(){
        it('data should be equal', function(done){
                filedata = '';
                edp.readFile('./test.txt', 0, smallBufferedStream);
                smallBufferedStream.once('end', function(){
                    //sampleData value is "A small test.
                    assert.equal(filedata, sampleData);
                    done();
                });
        });
    });
    describe('reading small file from byte 8', function(){
        it('data should be equal', function(done){
                filedata = '';
                edp.readFile('./test.txt', 8, smallBufferedStream);
                smallBufferedStream.once('end', function(){
                    //sampleData value here is "A small test. 
                    //It should be 'test.'
                    assert.equal(filedata, sampleData.substr(8));
                    done();
                });
        });
    });
});
于 2014-09-17T05:07:22.303 に答える