【问题标题】:How to write unit test for sailsjs controller in mocha如何在 mocha 中为sailsjs 控制器编写单元测试
【发布时间】:2016-06-23 16:43:17
【问题描述】:

我是sailsjs、nodejs 和mocha 单元测试的新手。任何人都可以指导我如何为以下控制器编写单元测试?

getdata : function(req, res) {
    User.findOne(req.id.query).populateAll()
        .exec(function(err, res) {
            if(err) { console.log(err); }
            req.id = res;
            return res.send(req.id);
    });
},

config/route.js

module.exports.routes = {
  'get /list/item':  'manager.getdata',
}

【问题讨论】:

    标签: node.js sails.js mocha.js supertest


    【解决方案1】:

    好的,首先在应用程序的根目录下创建测试文件夹。添加您喜欢的任何类型的文件夹结构...这是我的一个项目的屏幕截图:

    我使用 supertest 并且应该...因此,如果您想复制粘贴我将在此处输入的内容,请安装(当然还有 mocha):

    npm install supertest
    npm install should
    

    接下来,在 bootstrap.test.js 内部(例如查看上图以查看放置位置)添加如下配置:

    var Sails = require('sails');
    
    before(function (done) {
        process.env.NODE_ENV = 'test';
        process.env.PORT = 9999;
    
        Sails.lift({
            models: {
                connection: 'localDiskDb',
                migrate: 'drop'
            }
        }, function (err, server) {
            sails = server;
            if (err) return done(err);
    
            sails.log.info('***** Starting tests... *****');
            console.log('\n');
    
            done(null, sails);
        });
    });
    
    after(function (done) {
        sails.lower(done);
    });
    

    现在,添加您的第一个测试...在您的示例中,我会将其放在 test/integration/controllers/MyController.test.js 中

    这是您可以用于测试的演示代码:

    var request = require('supertest'),
        should = require('should');
    
    
    describe('My controller', function () {
    
        before(function (done) {
            done(null, sails);
        });
    
    
        it('should get data', function (done) {
            request(sails.hooks.http.app)
                .get('/list/item')
                .send({id: 123, someOtherParam: "something"})
                .expect(200)
                .end(function (err, res) {
                    if (err) return done(err);
    
                    should.exist(res.body);
    
                    done();
                });
        });
    });
    

    现在,打开 mocha.opts 文件(如果您感到困惑,请查看上面的屏幕截图)并添加如下内容:

    --bail
    --timeout 20s
    test/bootstrap.test.js
    test/integration/controllers/**/*.test.js
    

    最后,在你的根文件夹中的终端中输入 mocha 来运行测试!

    你也可以像这样向 package.json 添加脚本:

      "scripts": {
        "test": "mocha"
      },
    

    然后简单地运行:npm test

    【讨论】:

    • 所以在测试中,我如何传递 id.query 信息,因为在控制器中,需要“req.id.query”
    • 我更新了我的答案...检查测试的演示代码查找行:.send({id: 123, someOtherParam: "something"})...这里我将 id=123 发送给您路由,你可以使用 req.param('id')... 你的控制器看起来像这样:User.findOne(req.param('id').populateAll()。我不确定你在哪里看到req.id.query 语法....
    • 需要更多帮助:) ?
    • 单元测试不应启动服务器或命中数据库/do i/o
    猜你喜欢
    • 2019-09-27
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多