簡體   English   中英

在Node.js中使用Mocha進行測試

[英]Testing with Mocha in Node.js

在使用mocha編寫的測試中進行console.logging記錄時,我在終端中的行為確實不一致。 我們正在運行一個node.js服務器並正在運行socket.io。 出於某種原因,console.log是否僅在某些時間不會進入終端? 我真的很困惑這種行為。

➜  tests git:(master) ✗ mocha test-chat-server.js
hello world


echo
✓ echos message (68ms)

On Connect Things Should Happen
✓ initial connection events
  disconnected
  i'm here


    2 passing (93ms)

➜  tests git:(master) ✗ mocha test-chat-server.js
  hello world


    echo
      ✓ echos message (61ms)

    On Connect Things Should Happen
      ✓ initial connection events


    2 passing (77ms)

我運行mocha測試的這兩次之間的區別是第一次測試運行中出現的console.log語句(已斷開連接,我在這里)。 它們沒有出現在我進行的第二次測試中。

編輯:發布我的測試代碼以回應評論(謝謝!)

var should = require('should');
var socket = require('socket.io-client')('http://localhost:3000');


describe("echo", function () {
    var server,
        options ={
            transports: ['websocket'],
            'force new connection': true
        };

    it("echos message", function (done) {
        var client = socket.connect("http://localhost:3000", options);

        client.once("connect", function () {
            client.once("echo", function (message) {
                message.should.equal("Hello World");

                client.disconnect();
                done();
            });

            client.emit("echo", "Hello World");
        });
        done();
    });
});

describe("On Connect Things Should Happen", function() {

    it('initial connection events', function() {

        should.exist(socket); 
        socket.open();      
        socket.compress(false).emit('an event', { some: 'data' });

        socket.on('error', function() {
            console.log('error'); 
        }); 

        socket.connect(); 
        socket.on('disconnect', function(connection) {
            console.log('disconnected'); 
            console.log("i'm here");
        });



        socket.on('connect', function(connection) {
            console.log('connected'); 
        });
    });
});

您正陷入傳統的節點異步陷阱。 您的“事情應該發生”測試有時會在斷開連接事件發生之前返回,有時則不會。

您需要以與在“回顯消息”測試中相同的方式來處理完功能。 准時,它應該像這樣:

socket.on('disconnect', function(connection) { 
console.log('disconnected'); 
console.log("i'm here"); 
done()});

總的來說,我不確定該測試可以處理所有這些不同的回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM