Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在Node+Express appp中与Mocha和Chai一起试一试_Node.js_Express_Mocha.js_Chai_Chai Http - Fatal编程技术网

Node.js 在Node+Express appp中与Mocha和Chai一起试一试

Node.js 在Node+Express appp中与Mocha和Chai一起试一试,node.js,express,mocha.js,chai,chai-http,Node.js,Express,Mocha.js,Chai,Chai Http,我有如下简单路由的nodeJS应用程序: const express = require('express') const router = express.Router(); const logger = require('../logger'); router.use('/logMessage',(req, res) => { try { logger.info(req.query.message); res.send({

我有如下简单路由的nodeJS应用程序:

const express = require('express')
const router = express.Router();
const logger = require('../logger');

router.use('/logMessage',(req, res)  => {
    try {
        logger.info(req.query.message);
        res.send({
            statusMessage: 'success'
        })
    } catch (err) {
        logger.error('error in logging');
        logger.error(err);
        res.send({
            statusMessage: 'failure'
        })
    }
});

module.exports = router;
我能够使用下面的代码成功地测试try块,但是如何测试catch块呢

try块的测试:

describe('GET /logMessage', () => {
    it('should host logger api', (done) => {
        chai.request(server)
            .get('/logMessage?message=testMessage')
            .end((err, response) => {
                response.should.have.status(200);
                done();
            });
    });
});

您需要让try块中的语句抛出错误。您可以使用。为了在这里演示,我将重写console.info的实现,当消息为makeError时,将抛出一个错误

例如

router.js:

const express=需要“express”; const router=express.router; 常量记录器=控制台; 路由器。使用'/logMessage',req,res=>{ 试一试{ logger.inforeq.query.message; res.send{ 状态消息:“成功”, }; }犯错误{ logger.error'error in logging'; logger.error; res.send{ statusMessage:'失败', }; } }; module.exports=路由器; server.js:

const express=需要“express”; const-app=express; const router=require./router'; 常数端口=3000; app.userouter; if require.main==模块{ app.listenport,=>console.log'服务器正在侦听端口:'+端口; } module.exports=app; server.test.js:

const server=require./server'; const chai=需要“chai”; const sinon=要求“sinon”; const chaiHttp=需要'chai-http'; chai.usechaiHttp; 柴智屏,; 描述'6208151',=>{ 描述'GET/logMessage',=>{ 它“应该承载记录器api”,完成=>{ 柴 .requestserver .get'/logMessage?message=testMessage' .enderr,响应=>{ response.should.have.status200; 完成; }; }; 它“应该处理错误”,完成=>{ sinon.stubconsole,“info”.callsFakemessage=>{ 如果消息=='makeError'{ 抛出新错误“自定义错误”; } }; sinon.spyconsole,“错误”; 柴 .requestserver .get'/logMessage?message=makeError' .enderr,响应=>{ response.should.have.status200; sinon.assert.matchconsole.error.firstCall.CalledWithjustice'error in logging',true; console.error.secondCall.args[0]。should.be.instanceOfError; 完成; }; }; }; }; 集成测试结果与覆盖率报告:

62080151 获取/记录消息 测试消息 ✓ 应该托管记录器api吗 记录错误 错误:自定义错误 在Console.sinon.stub.callsFake/Users/ldu020/workspace/github.com/mrdulin/expressjs research/src/stackoverflow/6208151/server.test.js:23:17 在Object.invoke/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/sinon/lib/sinon/behavior.js:163:32 在Console.functionStub/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/sinon/lib/sinon/stub.js:39:43 在Function.invoke/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/sinon/lib/sinon/proxy invoke.js:47:47 在Console.bound控制台调用[as info]/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/sinon/lib/sinon/proxy.js:214:26 在router.use/Users/ldu020/workspace/github.com/mrdulin/expressjs research/src/stackoverflow/6208151/router.js:1:1894 在Layer.handle[as handle_request]/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/Layer.js:95:5 在trim_prefix/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:317:13 在/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:284:7 在Function.process_params/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:335:12 在next/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:275:10 在Function.handle/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:174:3 在router/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:47:12 在Layer.handle[as handle_request]/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/Layer.js:95:5 在trim_prefix/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:317:13 在/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:284:7 在Function.process_params/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:335:12 在next/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:275:10 expressInit/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/middleware/init.js:40:5 位于Layer.handle[作为handle_请求]/Users/ldu020/workspace/github.com/mrdulin/expressjs-research/node_模块 /express/lib/router/layer.js:95:5 在trim_prefix/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:317:13 在/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:284:7 在Function.process_params/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:335:12 在next/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:275:10 在query/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/middleware/query.js:45:5 在Layer.handle[as handle_request]/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/Layer.js:95:5 在trim_prefix/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:317:13 在/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:284:7 在Function.process_params/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:335:12 在next/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:275:10 在Function.handle/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/router/index.js:174:3 在Function.handle/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/application.js:174:10 在Server.app/Users/ldu020/workspace/github.com/mrdulin/expressjs research/node_modules/express/lib/express.js:39:9 在Server.emit events.js:198:13 在parserOnIncoming_http_server.js:677:12 在HTTPParser.parserOnHeadersComplete_http_common.js:109:17 ✓ 应处理错误43ms 2通过81毫秒 ------|-----|-----|-----|-----|---------- 文件|%Stmts |%Branch |%Funcs |%Lines |未覆盖的行 ------|-----|-----|-----|-----|---------- 所有文件| 90 | 50 | 50 | 94.74 | router.js | 100 | 100 | 100 | 100 | server.js | 77.78 | 50 | 0 | 87.5 | 9 ------|-----|-----|-----|-----|----------
谢谢,我最终使用sinon抛出错误,但是你的错误植入比我的好得多。这就是我所做的-const loggerStub=sinon.stublogger,'info'。throwsnew error'some fake error';