0

get 関数をテストしようとしています:

exports.get = function(req, res) {
  Subscriptions
    .find(req.params.id)
    .success(function(subscription) {
      if (subscription) {
        res.json({message: "Success"}, 200);
      } else {
        res.json({message: "Not found"}, 404);
      }
    })
    .error(function(error) {
        res.json({message: "Internal server error"}, 500);
    });
};

具体的には、データベースにヒットするかどうかはあまり気にしません。成功イベントとエラー イベントが発生するシナリオのみをテストしたいと考えています。データベースを処理するための orm として、sequelize.js を使用しています。テストを起動して実行しましたが、タイムアウトがあり、少し厄介です。これを行うより良い方法はありますか?これまでに書いたテストは次のとおりです。

var express = require('express')
  , sinon = require('sinon')
  , subscription = require('app/controllers/subscriptions')
  , Subscriptions = require('app/models/subscriptions')
  ;

describe('subscription controller', function() {
  beforeEach(function() {
    this.mockResponse = sinon.mock(express.response);
  });

  afterEach(function() {
    this.mockResponse.restore();
  });

  describe('GET /subscriptions/:id', function() {
    it('should return a json response', function(done) {
      var request = {
        params: {
          id: 'identifier'
        }
      };

      var expectedResponse = {
        subscriptions_uri : "/subscription/identifier"
      };

      this.mockResponse
        .expects('json')
        .once()
        .withArgs(expectedResponse);

      subscription.get(request, express.response);
      setTimeout(function() {
        done();
      }, 500);
    });
  });
});
4

1 に答える 1

0

スーパーテスト ライブラリを使用することにしました。これにより、コントローラーのテストが非常に簡単になりました。

var express = require('express')
  , subscription = require('app/controllers/subscriptions')
  , request = require('supertest')
  , app = express()
  ;

describe('subscription controller', function() {
  describe('GET /subscriptions/:id', function() {
    it('should return a json response', function(done) {
      var expectedBody = {
        subscriptions_uri : "/subscription/identifier"
      };

      request(app)
        .get('/subscriptions/identifier')
        .set('Accept', 'application/json')
        .expect('Content-Type', /json/)
        .expect(expectedBody)
        .expect(200, done);
    });
  });
});
于 2013-04-02T15:44:49.077 に答える