2017-01-30 9 views
0

Ich habe einen Code, der Versprechungen verwendet, aber es läuft nicht, wenn durch Mocha laufen. Ich habe es auf das Wesentliche vereinfacht:Verspricht nicht mit Mocha, in Nodejs

process.env.NODE_ENV = 'test'; 

const Promise = require('bluebird'); 

console.log('zzzz IN'); 
Promise.resolve('xxx').then(function(val) { 
    console.log('[normal]', val); 
}).catch(function(error) { 
    console.log('[error]', error); 

}) 
console.log('zzzz OUT'); 

wenn über node test/index.js laufen erhalte ich:

zzzz IN 
zzzz OUT 
[normal] xxx 

aber über Mokka:

> [email protected] test /Users/ajmas/Development/mocha-and-promise 
> eslint lib && mocha --timeout 10000 

zzzz IN 
zzzz OUT 


0 passing (0ms) 

Ist dies ein Problem in Mokka oder in der Art und Weise Ich habe Dinge konfiguriert?

Package.json:

{ 
    "name": "my-server", 
    "version": "0.0.1", 
    "description": "Mocha and Promises test case", 
    "main": "lib/main.js", 
    "scripts": { 
     "start-dev": "NODE_ENV=dev node test/index.js", 
     "start-dev-debug": "DEBUG=express:* npm run start-dev", 
     "start": "node lib/main.js", 
     "test": "eslint lib && mocha --timeout 10000" 
    }, 
    "engines": { 
     "node": ">=6.7.0" 
    }, 
    "dependencies": { 
     "bluebird": "^3.4.6" 
    }, 
    "devDependencies": { 
     "chai": "^3.5.0", 
     "chai-http": "^3.0.0", 
     "eslint": "^3.8.1", 
     "eslint-config-standard": "^6.2.1", 
     "eslint-plugin-promise": "^3.3.0", 
     "eslint-plugin-standard": "^2.0.1", 
     "mocha": "^3.2.0" 
    } 
} 

Laufen mit Knoten 6.7.0 auf MacOS X 10.12.2. Habe auch mit 'bluebird', 'promise' und nativem Promise versucht, aber das gleiche Verhalten bei jedem.

BTW dieser Code soll Teil der Anwendung sein Ich bin Integrationstests, aber weil keine Versprechungen abgeschlossen sind, kann ich den Server nicht aus Mocha starten.

Antwort

0

Stellt sich heraus, es funktioniert, aber Sie müssen den Code mit einem ‚es‘ Funktionsaufruf setzen, so dass:

it('Run the promise, function(done) { 
    Promise.resolve('xxx').then(function(val) { 
     console.log('[normal]', val); 
    }).catch(function(error) { 
     console.log('[error]', error); 
    }) 
}) 
+1

Sie brauchen nicht 'done', können Sie einfach das Versprechen zurück. Siehe https://mochajs.org/#working-with-promises –