javascript - 简单的 NodeJS/Express 单元测试

标签 javascript node.js unit-testing mocha.js

嗨,我对 NodeJs 还很陌生,我正在尝试编写我的第一个测试。

我对设置有点困惑,所以我希望得到一些帮助。

我写了这两个函数:

app.js:

var express = require('express')
  , cors = require('cors')
  , app = express();

app.get('/a_nice_jsonp',cors(corsOptions), function(req, res, next){
  var result = parseCookies(req);
  res.jsonp(result);
});

app.get('',function(req,res,next){
  res.statusCode = 200;
  res.end()
});

我不会将其导出为模块,因为它是我唯一的文件。

我认为为此编写测试非常容易。我从这样的事情开始:

app-test.js:

var expect = require('expect.js');
var express = require('express');
var expressApp = express();

describe('app js test', function() {
  describe('GET /', function() {
    it('should respond to GET with empty path', function () {
      expressApp.get('', function(req, res, body){
        expect(res.status).to.equal(200);
      });
    })
  });
});

我认为它确实读起来像是一个简单的任务,但我似乎无法转移测试的设置以及如何进行它。

有人可以帮我吗?

编辑:上述测试运行良好。但是,我在测试时遇到困难,例如.end() 以及 jsonp 请求 中的结果。我简单不知道该怎么做?!

最佳答案

当你这样做时

expressApp.get('', function(req, res, body){
    expect(res.status).to.equal(200);
  });

您只是绘制路线。

要测试您的 REST API,您必须使用类似 supertest 的库(该链接中有一个使用express + mocha进行测试的示例)

它是这样工作的

var request = require('supertest');
var express = require('express');

var app = express();

app.get('/a_nice_jsonp',cors(corsOptions), function(req, res, next){
  var result = parseCookies(req);
  res.jsonp(result);
});

app.get('',function(req,res,next){
  res.statusCode = 200;
  res.end()
});

describe('app js test', function() {
  describe('GET /', function() {
     it('should respond to GET with empty path', function (done) {
        request(app)
               .get('')
               .expect(200)
               .end(done) 
     });
  });
});

使用单独的文件进行编辑

app.js

var express = require('express')
  , cors = require('cors')
  , app = express();

app.get('/a_nice_jsonp',cors(corsOptions), function(req, res, next){
  var result = parseCookies(req);
  res.jsonp(result);
});

app.get('',function(req,res,next){
  res.statusCode = 200;
  res.end()
});
module.exports = app;

应用程序测试.js

var request = require('supertest');
var app = require('app.js');


describe('app js test', function() {
  describe('GET /', function() {
     it('should respond to GET with empty path', function (done) {
        request(app) 
               .get('')
               .expect(200)
               .end(done) 
     });
  });
});

关于javascript - 简单的 NodeJS/Express 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36836540/

相关文章:

mysql - 如何在node js mysql中解析电子邮件?

javascript - Sequelize 如何正确创建具有约束的用户数据?

javascript - 如何更新单个 firebase firestore 文档

javascript - 在不知道其父元素的情况下删除 dom 元素?

javascript - beautifulsoup 删除所有内部 javascript

javascript - 单击 RichMarker 穿过标记即可在 iOS 上绘制 map

node.js - 加速 AngularJs 项目的 Travis-CI 依赖项安装

node.js - REST API 单元测试,并在 Node.js 中返回 Promise

ruby - 如何让assert_raise处理异常子类

objective-c - 使用 NSURLConnection 进行单元测试