2016-09-21 15 views
1

私はMochaで認証されたルートをテストしようとしていますが、beforeまたはbeforeEachフックで作成されたユーザーは存続しません。私はbeforeEachを使用してafterEachにクリーンアップしようとしているJWTで認証されたルートをテストするのにMocha + supertest +パスポートを使用できません

const should = require('chai').should(), 
    mongoose = require('mongoose'), 
    request = require('supertest'), 
    app = require('../../../../server'), 
    agent = request.agent(app), 
    AdminUser = require('../../../models/AdminUser'); 

var credentials = { 
    username: 'admin', 
    password: 'password' 
}; 

var admin = new AdminUser(credentials); 

describe('authenticated routes', function() { 
    before(function (done) { 
     admin.save(function (err) { 
      if (err) done(err); 

      agent.post('/api/authenticate') 
      .send(credentials) 
      .end(function (err, res) { 
       if (err) done(err); 
       jwtToken = res.body.token; 
       done(); 
      }); 
     }); 
    }); 

    it('should get content with 200', function (done) { 
     agent.get('/api/content') 
     .set('Authorization', 'JWT ' + jwtToken) 
     .expect(200) 
     .end((err, res) => { 
      if (err) return done(err); 
      done(); 
     }); 
    }); 

    after(function (done) { 
     AdminUser.remove().exec(); 
     done(); 
    }) 
}); 

test.js

は、/api/authenticateへの最初の投稿は、トークンが受信され、成功し200を返しますが、トークンを使用して認証しようとしたとき、それが取得します400。これはAdminUserが見つからないためです。パスポート戦略で

、私が持っている:

module.exports = function (passport) { 
    passport.use(new JwtStrategy(opts, function(jwtPayload, done) { 
     AdminUser.findOne({ username: jwtPayload.username }, function (err, user) { 
      if (err) { return done(err); } 
      if (!user) { 
       return done(null, false, { message: 'Bad token.' }); 
      } 
      return done(null, user); 
     }); 
    })); 
}; 

AdminUserは関係なく、常に私は、ユーザーの保存場所のnullです。コールバックをネストしたときにのみ動作しますが、それはbeforeまたはbeforeEachの使用を無効にします。

答えて

0

あなたはベアラ認証方式でAuthorizationヘッダーを使用する必要があります。

.set('Authorization', 'Bearer ' + jwtToken) 
関連する問題