摩卡和锡诺testing与承诺超时

我有我的testing使用Sinon和摩卡以下代码。 每当我运行这些testing时,我都会看到以下的结果

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. 

testing通过,直到我开始将承诺纳入图片,并使testing更现实,即设置处理asynchronous调用。

我做错了什么,如何让testing通过?

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 } }] }); } }; }; 

你的承诺没有解决。 Q.fulfill已被弃用。 如果您希望返回已解决的承诺,请使用简单的Q(value)从API参考 :

Q(值)

如果value是Q诺言,则返回诺言。

如果value是来自另一个图书馆的承诺,那么它被强制为Q承诺(在可能的情况下)。

如果value不是一个承诺,则返回一个有价值的承诺。