2016-06-20 64 views
0

我在我的應用程序的幾個集成測試:正確地調用摩卡做回調,並承諾

it('creating vehicle', function (done) { 
    createVehicle()   
     .then(() => { 
     done(); 
     }) 
     .catch((err) => { 
     done(err); 
     }); 
    }); 

createVehicle使POST請求,並返回承諾:

return request.json('post', '/api/vehicle/') 
    .send(obj) 
    .expect(200) 
    .then((res) => { 
     expect(res.body).toExist("Body is empty"); 
     expect(res.body.id).toExist("Id is empty");  
     return res.body; 
    }); 

現在一切工作正常,但如果我重寫第一段代碼如下:

it('creating vehicle', function (done) { 
     createVehicle()   
      .then(done) //* 
      .catch(done); //* 
     }); 

我從摩卡得到錯誤

()完成非錯誤

我明白爲什麼調用。該createVehicle回報res.body和它傳遞給then回調,在結果done運行方式done(arg)和我得到的錯誤,因爲摩卡done回調有沒有ARG被調用時,有沒有錯誤並論證時有錯誤。

是否有可能使用此變體:

.then(done) 
.catch(done); 

如何實現這一目標?

當然,我可以刪除return語句,但createVehicle在多處使用,我需要返回值:

it('creating vehicle with media', function (done) { 
    createVehicle() 
     .then(createMedia) //createMedia will get returned value  
     //.... 
    }); 

回答