2017-07-05 5 views
1

J'ai le code suivant pour mes tests avec Sinon et Mocha. Chaque fois que je lance ces tests, je reçois le texte suivant RetourTests Mocha et Sinon avec Promesses Timeout

0 passing (747ms) 
    8 pending 
    1 failing 

    1) Customer displays order Given that the order is empty "before each" hook for "will show no order items": 
    Error: Timeout of 500ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. 

Les tests ont été passent jusqu'à ce que je commencé à intégrer les promesses dans l'image et de faire des tests plus réalistes, par exemple, mis en place pour traiter asynchrone appels. Qu'est-ce que je fais de mal et comment puis-je faire passer les tests?

tests.js

'use strict'; 
require("babel-register"); 

var chai = require('chai'); 
var expect = chai.expect; 
var sinon = require('sinon'); 
var orderSystemWith = require('../lib/orders'); 

chai.use(require("chai-as-promised")); 


//describe is used to display features 
//context is used to display scenarios 
//it is used to describe tests within a feature/scenario 
describe('Customer displays order', function() { 
    beforeEach(() => { 
     this.orderDAO = { 
      byId: sinon.stub() 
     }; 
     this.orderSystem = orderSystemWith(this.orderDAO); 
    }) 
    context('Given that the order is empty',() => { 
     var result; 
     beforeEach((done) => { 
      this.orderId = 'some empty order id'; 
      this.orderDAO.byId 
       .withArgs(this.orderId) 
       .callsArgWithAsync(1, null, []); 

      return this.orderSystem.display(this.orderId) 
       .then(function (res){ 
        result = res 
       }) 
     }); 

     it('will show no order items',() => { 
      //expect(result).to.have.property('items').that.is.empty; 
      return expect(result).to.eventually.have.property('items').that.is.empty; 
     }); 
     it('will show 0 as the total prince',() => { 
      expect(result).to.have.property('totalPrice').that.is.equal(0); 
     }); 
     it('will only be possible to add a beverage',() => { 
      expect(result).to.have.property('actions').that.is.deep.equal([{ 
       action:'append-beverage', 
       target: this.orderId, 
       parameters: { 
        beverageRef: null, 
        quantity: 0 
       } 
      }]) 
     }); 
    }); 

    context('Given that the order contains beverages', function(){ 

     it('will show one item per beverage'); 
     it('will show the sum of unit prices as total prince'); 
     it('will be possible to place the order'); 
     it('will be possible to add a beverage'); 
     it('will be possible to remove a beverage'); 
     it('will be possible to change the quantity of a beverage'); 
    }); 

    context('Given that the order has pending messages', function(){ 
     it('will show the pending messages'); 
     it('there will be no more pending messages'); 
    }) 

}); 

orders.js

var Q = require('q'); 
    module.exports = function() { 
     return { 
      display: (orderId) => { 
       return Q.fulfill({ 
        items: [], 
        totalPrice: 0, 
        actions: [ 
        { 
         action: 'append-beverage', 
         target: orderId, 
         parameters: { 
          beverageRef: null, 
          quantity: 0 
         } 
        }]  
       }); 
      } 
     }; 
    }; 

Répondre

1

Votre promesse n'est pas résolu. Q.fulfill est obsolète. si vous souhaitez revenir une utilisation promesse résolue simplement Q(value) De l'API reference:

Q (valeur)

Si value est une promesse de Q, retourne la promesse. Si value est une promesse d'une autre bibliothèque, elle est contrainte dans une promesse Q (si possible). Si value n'est pas une promesse, renvoie une promesse remplie avec la valeur .