如何在Express.js中模拟控制器变量?

时间:2014-02-11 17:08:45

标签: javascript unit-testing express controller mocking

我的索引操作将列出数据库中的客户,我想测试没有数据库依赖关系的控制器,所以我需要模拟客户变量。

我发现的一种方法是在全球范围内设置客户

process.env.NODE_ENV = 'test';

var request, expect, app;


var customers = [
  { name : 'Customer A', email : "a@customer.com"},
  { name : 'Customer B', email : "b@customer.com"},
  { name : 'Customer C', email : "c@customer.com"},
  { name : 'Customer D', email : "d@customer.com"}
  ];

global.customers = customers;

request = require('supertest');
expect = require('expect.js');
app = require('../index');

describe('GET /api/customers', function(){

  it('should list the customers', function(done){
    request(app)
      .get('/api/customers')
      .set('Accept', 'application/json')
      .expect('Content-Type', /json/)
      .expect(200)
      .end(function(err, res){
        expect(res.body.length).to.be(4)
        done()
      });
  });

});
var _dataFromMyDatabase = [
  { name : 'Customer from Database', email : "database@customer.com"}
  ];

exports.index = function(req, res){
  var customers = global.customers || _dataFromMyDatabase;
  res.json(customers);
};

但我想这不是更好的方法,所以我正在寻找更好的主意。 :)

有人可以帮助我吗?

0 个答案:

没有答案