node.js - 如何在 Mocha 中为 sailsjs Controller 编写单元测试

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

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

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);
    });
},

配置/route.js

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

最佳答案

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

enter image description here

我使用 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

关于node.js - 如何在 Mocha 中为 sailsjs Controller 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37997374/

相关文章:

javascript - 在 Nodejs 与 Redis 哈希中使用全局对象

node.js - React + Material-UI - 警告 : Prop className did not match

postgresql - 在 Heroku 上将 Postgres 与 Sails.js 结合使用时出错

javascript - 使用 sinon stub ES6 原型(prototype)方法

node.js - 使用 server.inject 错误捕获的 hapijs 测试

node.js - 使用 koa js 检索正文的字符串和 json

javascript - NodeJS 和 NPM : Package Security

mysql - 如何用 Sail.js 和 MySQL 实现全文搜索?

javascript - 如何在 SailsJS/Waterline 中使用 Model.query() 和 Promise?

javascript - 如何将流、 promise 和管道一起编写单元测试?