【问题标题】:Invoking routes for mocha test为 mocha 测试调用路由
【发布时间】:2016-12-24 03:06:52
【问题描述】:

我正在尝试使用 mocha 和 chai 编写单元测试,我面临的主要问题是我必须为每个 API 专门定义 url,即

test.js

var expect = require('chai').expect;
var should = require('chai').should;
var express = require('express');
var chai = require('chai');
var chaiHttp = require('chai-http');
chai.use(chaiHttp);

var baseUrl = 'http://localhost:3000/api';

describe("Test case for getting all the  users", function(){
                it("Running test", function(done){

                    this.timeout(10000);    //to check if the API is taking too much time to return the response.

                    var url = baseUrl + '/v1/users?access_token=fd085c73227b94fb3d1d5552b5a62be963b6d068'

                    chai.request(url)
                    .get('')
                    .end(function(err, res) {
                        //console.log('routes>>>>', routes);
                        expect(err).to.be.null;
                        expect(res.statusCode).to.equal(200);   // <= Call done to signal callback end
                            expect(res).to.have.property('text');
                            done();                              
                    });
                });
            });

我希望我的所有路由都应该直接从我的 routes.js 文件中调用,而不是对每个 url 进行硬编码,有可能吗? TIA。

【问题讨论】:

    标签: node.js express routes mocha.js chai


    【解决方案1】:

    您可以为路由器对象创建一个初始化函数来填充您的路由。将该 init 函数用于测试和实际代码。这是一个例子:

    //
    // initRouter.js
    //
    function initRouter(router){
        router.route('/posts')
            .post(function(req, res) {
                console.log('req.body:', req.body)
                //Api code
            });
        router.route('/posts/:post_id')
            .get(function(req, res) {
                console.log('req.body:', req.body)
                //Api code
            })
        return router;
    }
    module.exports = initRouter;
    
    //
    // in the consumer code
    //
    var initer = require('./initRouter');
    app.use('/api', initer(express.Router()));
    

    【讨论】:

      【解决方案2】:

      在您展示的示例中,您正在测试通过某些 IP 和 PORT 公开的现有 Web 服务器。使用express-mocks-http,您可以模拟快速请求和响应对象,并将它们直接传递给您定义的路由函数。有关详细信息,请参阅软件包文档。

      【讨论】:

      • 谢谢,我试试看。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      • 2013-07-13
      • 2017-01-25
      • 2015-05-17
      相关资源
      最近更新 更多