4

スーパーテストとノックを使用して Express アプリケーションのミドルウェア機能をテストしようとしていますが、セットアップしたルートが以前のミドルウェアによってチェックされ、着信reqオブジェクトにセッション プロパティが存在することを確認するという問題が発生しています。

テストを実行する前に、何らかの方法でセッション オブジェクトをモック アウトする必要がありますが、これにアプローチする方法がわかりません。まず、いくつかのコードを共有させてください。

router.js

app.use('/api', helpers.hasAccessToken, require('./routes.js'));

ルート.js

router.route('/*')
  .get(routesController.fetch)

helpers.js

module.exports.hasAccessToken = function(req, res, next) {
  if(req.session.accessToken){
    next();
  } else {
    res.status(401).send('LOGIN_SESSION_ENDED');
  }
};

routesController.js

module.exports.fetch = function(req, res) {
  var options = helpers.buildAPIRequestOptions(req);
  request(options, function(err, response, body){
    res.status(response.statusCode).send(body);
  });
};

routesController.spec.js

var app = require('./index.js'),
  request = require('supertest')(app),
  expect = require('chai').expect,
  nock = require('nock');


describe('GET requests', function(){
  beforeEach(function(){
    nock('https://10.105.195.12:8243')
      .get('/v1/schemes')
      .reply(200, {foo:'bar'});
  });
  it('should return a 200 HTTP status code', function(done){
    request
      .get('/api/schemes')
      .end(function(err, res){
        expect(res.status).to.equal(200);
        done();
      });
  });
});

の値が 401 であるため、テストは失敗します。express-session を使用していますが、テスト スイート内のオブジェクトを取得し、テストを実行する前に accessToken プロパティの値を設定するres.status方法があるかどうか疑問に思いました。req.session.

誰かアドバイス\考えを教えてください。

ありがとう

4

1 に答える 1