2016-12-29 29 views
-1

我是javascript/nodejs的新手,我需要通過mocha/nodejs在4mb的限制範圍內測試一個有效載荷,並且我使用了一個函數來生成長度爲〜4mb +的字符串來模擬有效載荷並將其傳遞給請求作爲有效載荷。但是,我收到超時異常Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.。這可能是因爲這種方法是無效的,因爲請求生成時間本身太長了......我試圖增加等待時間,但是徒勞無功。如何在運行時爲JavaScript中的請求生成負載?

it('expected: handle request made with payload exceeding REQUEST_LIMIT of 4mb', (done) => { 
 
     chai.request(server).post('/payload').send({ data: payload(4520000) }) // payload exceeds RATE_LIMIT of 4mb 
 
     .set('content-type', 'plain/text') 
 
     .end((error, response) => { 
 
      expect(response).to.have.status(500); 
 
      // return expect(response).to.eventually.have.status(500); 
 
     done(); 
 
     }); 
 
    });

請注意,我也用柴作爲許諾的,並沒有爲我工作:

return expect(response).to.eventually.have.status(500);

回答

1

我建議剛回國的承諾,chai.request根本就不生產和使用done,因爲這會使您的錯誤處理變得複雜:

it('expected: handle request made with payload exceeding REQUEST_LIMIT of 4mb', 
    () => chai.request(server).post('/payload').send({ data: payload(4520000) }) 
     .set('content-type', 'plain/text') 
     .end((error, response) => { 
      expect(response).to.have.status(500); 
     })); 

(我使用的「簡明體」而不是「塊體」爲上方的箭頭功能。該return是隱含的。)

如果需要增加超時,因爲有效載荷生成時間過長,你有以上更改爲正確的function和使用this.timeout(....)到足夠大的值。

0

我想出了問題,因爲它在我身邊,並且感謝@Louis肯定了有效負載生成的方法,至少是可以接受的。我在package.json'mocha ./tests/ -t 3000'中指定了等待超時,但未能運行'npm install'以使更改生效。

it('expected: handle request made with payload exceeding REQUEST_LIMIT of 4mb', (done) => { 
 
     chai.request(server).post('/payload').send({ data: payload(4520000) }) // payload exceeds RATE_LIMIT of 4mb 
 
     .set('content-type', 'plain/text') 
 
     .end((error, response) => { 
 
      expect(response).to.have.status(500); 
 
      done(); 
 
     }); 
 
    }).timeout(3000);

我已經從除去的package.json超時使用和它移動到其各自的測試用例;禮貌@Louis

+1

我沒有看到'npm install'會如何改變超時。我可以看到如何在你的'package.json'中設置一個'test''腳本',該腳本硬編碼「mocha ./tests/ -t 3000',然後忘記使用'npm run ...'(或'npm test')會是一個問題。而且,如果是我,我仍然希望僅在本地增加超時,而不是整個套件,除非您確實有整個套件需要更高的超時時間。 – Louis

+0

你是對的,它應該是具體的測試案例。我已經通過反饋更新了答案,謝謝! –

相關問題