2017-08-11 191 views
0

嗨我運行我的測試時出現此錯誤我已閱讀承諾並完成我仍然不確定將它放在我的測試中,還是最好在每個之前做一個保存重複?實現已完成的承諾的最佳方式是在哪裏和什麼?隨機失敗JS測試

錯誤:超過2000ms的超時。對於異步測試和掛鉤,確保 「done()」被調用;如果返回Promise,請確保解決。

const chakram = require('chakram'); 
const expect = chakram.expect; 


describe("Json assertions", function() { 
    it("Should return the matching test file and have a 200 response", function() { 

     let expected = require('../../test/fixtures/testfile.json'); 
     let response = chakram.get("http://test"); 
     expect(response).to.have.json(expected); 
     expect(response).to.have.status(200); 
     return chakram.wait(); 
    }); 
}); 
+1

那麼,如果'http:// test'不可用?這個承諾會解決嗎? – Bergi

回答

0

我不熟悉chakram,但通常這裏應該有測試你的承諾的工作模式(使用done):

describe('Test Suite', function() { 
    it('should do something...', function(done) { 
    const testValue = 'testValue'; 
    someAsyncFunction(testValue).then(function(result) { 
     result.should.have.property('foo'); 
     result.should.have.property('bar'); 
     done(); 
    }); 
    ]); 
}); 

現在對於你所擁有的,它看起來像docs for Chakram演示如何使用承諾進行測試(在Promises標頭下)。所以,你的適應代碼將是這樣的:

const chakram = require('chakram'); 
const expect = chakram.expect; 

describe("Json assertions", function() { 
    it("should...", function() { 
    let expected = require('../../test/fixtures/testfile.json'); 
    chakram.get("http://test").then(function(response) { 
     expect(response).to.have.json(expected); 
     expect(response).to.have.status(200); 
    }); 
    }); 
}); 

再說一遍,我不知道該庫,但如果你的測試運行仍然埋怨done,加done像這樣:

describe("Json assertions", function() { 
    it("should...", function (done) { 
    let expected = require('../../test/fixtures/testfile.json'); 
    chakram.get("http://test").then(function(response) { 
     expect(response).to.have.json(expected); 
     expect(response).to.have.status(200); 
     done(); 
    }); 
    }); 
}); 

編輯: donedescribe區塊,應該在it

+0

謝謝。這非常有用。 –