2015-09-08 66 views
-1

我正在嘗試使用摩卡和should.js套接字交互的負載測試場景。我有一組用戶詳細信息,我想使用套接字通信進行身份驗證,並希望驗證他們的響應。它適用於單個用戶,但是當我嘗試爲多個用戶循環時 - 我最終遇到了問題。收集了一些基於帖子的輸入:Tests from looping through async JavaScript (Mocha)使用摩卡的多個異步套接字響應處理

下面的代碼片段:

var users = [{name:'A',password:'password',expected:'success'},{name:'B',password:'badPass',expected:'failure'}]; 
describe('socket Interaction test' , function() { 
    function socketInteraction(users, done) { 
     client.emit('userAuthentication', {'name':users.name,'password':users.password}, function(callback) { 
      console.log('Emit' + users.name); 
     }); 

     client.on('userAuthenticationResponse', function(response) { 
      console.log('Resp' + response.status + 'Expected' + users.expected); 
      response.status.should.equal(users.expected); 
      done(); 
     }); 
    } 

    it('Dummy', function(done) { 
     describe('Mutiple login Test Async', function() { 
      it('User Login Test', function(done) { 
       users.forEach(function(users, callback) { 
        console.log(users.name); 
        socketInteraction(users, function(err) { 
         if (err) { 
          return; 
         } 
         done(); 
        }); 
       }); 
      }); 
     }); 
    }); 
}); 

我得到在運行測試的響應是:

socket Interaction test 
    ✓ Dummy 
    Mutiple login Test Async 
A 
B 
RespsuccessExpectedsuccess 
    ✓ User Login Test 
RespsuccessExpectedfailure 
    2 passing (43ms) 

第二個測試有失敗。不知道我在哪弄亂了代碼。欣賞一些指針來解決這個問題。謝謝。

回答

0

完成的帕爾馬應該在async.forEach的第二個參數中調用。您在循環函數中調用的函數應該是callback(),以告訴異步,只是該用戶已完成。 您還沒有完成異步回調。

會發布代碼,但我在我的手機上。如果不清楚,我可以稍後添加。

+0

我嘗試添加完成作爲第二個參數,幷包含調用回調,而不是done()。它導致了一系列新問題。讚賞你是否可以更詳細地概述這些變化。謝謝。 – Vineeth

+0

我看到的另一件事是,你已經將你的describe()和it()混合了一下。你應該讓描述成爲它的包裝。不要把它放在另一個裏面。你重寫了外部函數,這樣測試永遠不會結束。如果您看到更多問題,請使用新代碼進行更新。 – William