2017-11-17 1 views
0

erhalte ich diesen Fehler, wenn versuchen, meinen Test ausführen:Fehler UnhandledPromiseRejectionWarning zu Tests versuchen

UnhandledPromiseRejectionWarning: Unhandled promise rejection 
(rejection id: 1): TypeError: Cannot read property 'body' of undefine 

Ich brauche nur, dass „Captcha“ true Ergebnis. Jede Änderung, die ich auf meinen Code angewendet habe, gibt mir das gleiche Ergebnis, ich habe versucht, die asynchronen Funktionen zu entfernen, aber ich habe immer noch das gleiche Problem.

hier mein Testcode:

import proxyquire from 'proxyquire'; 
import assert from 'assert'; 
import chai from 'chai'; 
const expect = chai.expect; 

const loggerStub ={ 
    log:()=>{ 
    return; 
    } 
} 

const lodashStub =()=>{ 
result = undefined; 
} 
const validationStub = { 
    validation:()=>{ 
    return Promise.resolve({ 
    data:{ 
    success:true 
     } 
     }); 
    } 
    } 

const req = { 
body:{ 
captchaResponse: true 
    } 
    } 

const res = { 
    status: (status) => { 
    return { 
    send:() => { 
    return; 
    } 
    } 
    } 
} 

describe('Probando captcha',()=>{ 
describe('Validación de captcha',()=>{ 
    it('Captcha validado OK', (done)=>{ 
    const captcha = proxyquire('../src/controllers/captcha',{ 
     '../domain/captcha': validationStub, 
     '../core/logger': loggerStub, 
     'lodash': lodashStub 
    }); 
    const next =() => { 
     console.log('llegó al next'); 
     expect(captcha.validation()).to.be.true; 
     done(); 
    } 
    setTimeout(() => { 
     captcha.validation(req, res, next); 
    }, 200); 
    }); 
}); 
}); 

hier mein Code:

import { get } from "lodash"; 
import captcha from "../domain/captcha"; 
import logger from "../core/logger"; 
require("babel-polyfill"); 

const validation = async (req, res, next) => { 
if (!req.body.captchaResponse) { 
    logger.log("info", "MISSING CAPTCHA PARAMETERS"); 
    return res.status(422).send(); 
} 
const captchaResponse = req.body.captchaResponse; 
console.log(req.body.captchaResponse); 

try { 

    const result = await captcha.validation(captchaResponse); 
    if (get(result, "data.success")) { 
    logger.log("info", "CAPTCHA VALIDATION OK"); 
    next(); 
    return; 
    } else { 
    logger.log("info", "FAIL CAPTCHA VALIDATION"); 
    return res.status(422).send(); 
    } 
} catch (e) { 
console.log(e); 
logger.log("info", "ERROR CAPTCHA VALIDATION"); 
return res.status(422).send(); 
} 
}; 

export default { validation }; 

Mein package.json Test:

"test": „Mokka --compilers js: babel- register babel-polyfill ./test/ - rekursiv "

+0

Wo ist dein ** Körper-Parser **, mein Herr? Vermutlich vermisst du es. Möge der [Link zwingen] (https://hashnode.com/post/why-am-i-getting-reqbody-as-undefined-in-express-ciu8ecx4k04lhza53vc2hqv64) bei dir sein. – oneturkmen

+0

@oneturkmen ich Body-Parser verwendet, aber das gleiche Ergebnis, console.log (req.body.captchaResponse) zurückgegeben True –

+0

können Sie die folgende Zeile "expect (captcha.validation()). To.be.true" und Sieh es funktioniert – oneturkmen

Antwort

1

Die folgende Zeile in der Definition o f next() entweder Probleme

expect(captcha.validation()).to.be.true; 

Sie verursacht müssen req, res, next in captcha.validation() aufzunehmen oder entfernen überhaupt diese Zeile.

Warum? Da Funktion drei Argumente erwartet, und wie es keine erhält, erhalten Sie undefined auf req.body.

+0

Sie sagen so? : expect (captcha.validation (req, res, next)) .be.true; das macht meinen kli kaputt, ich weiß nicht, ob ich falsch geschrieben habe –

Verwandte Themen