4

こんにちは、express js コードで単体テストを行いたいのですが、データをモックしたいので、複数の Web サイトやブログを検索した後、このライブラリを見つけましが、このライブラリをモックやデータに使用する方法がわかりません。私のテストコードは

var request = require('supertest');
var server = require('./app');
var chai = require('chai');
var chaiHttp = require('chai-http');

var server = require('./app');

var should = chai.should();
chai.use(chaiHttp);

describe('loading express', function () {

  it('responds to /', function testSlash(done) {
    request(server)
      .get('/')
      .expect(200, done);
  });

  it('404 everything else', function testPath(done) {
    request(server)
      .get('/foo/bar')
      .expect(404, done);
  });

  it('responds to /customers/getCustomerData', function testPath(done) {
    request(server)
      .get('/customers/getCustomerData?id=0987654321')
      .end(function(err, res){
        res.should.have.status(200);
        res.body.should.be.a('object');
        res.body.status.should.equal("success");
        res.body.data.customerId.should.equal("0987654321");

        done();
      });
  });

});

現在、このコードはデータベースからデータを取得していますが、モック データを使用した単体テストが必要です。どうすればこれを達成できますか?

__編集__

Express js routes ファイル内に記述されたコードをテストしたいと考えています。このルートは、このようにapp.jsファイル内で呼び出しています

var customers = require('./routes/customers');
app.use('/customers', customers);

現在、顧客のルートファイルに含まれるコードは次のとおりです。

function getCustomerData(req, res, next) {
    var response = {};
    var cb = function (response) {
        res.send(response);
    }
    var modelObj = req.models.customer_master;
    var data = req.query;
    controllers.customers.get(modelObj, data, cb);
};
router.get('/getCustomerData', function (req, res, next) {
    getCustomerData(req, res, next);
});

モックデータを使って「get」メソッドのレスポンスをテストしたい

4

3 に答える 3

4

コントローラーのミドルウェアをスタブしたいと思います。サーバー側のコードを提供していないため、いくつかのことを想定しています。

app.get('/', rootController.get);

次に、このコントローラーをスタブします。

it('responds to /', function testSlash(done) {
  const rootController = require('./path/to/your/controller');
  const rootControllerStub = sinon.stub(rootController, "get",
    function(req, res, next){
      res.status(200).json({stubbed: 'data'});
    });
  request(server)
    .get('/')
    .expect(200)
    .expect({stubbed: 'data'})
    .end(done);
});
于 2016-09-28T12:51:57.850 に答える