0

私はモカが初めてで、モカでテストを書くことに慣れようとしています。Facebook認証を使用してユーザーを認証するために、現在everyauthを使用しているシナリオがあります。したがって、以下に示すエンドポイント ユーザー/プロファイルへの要求がある場合があります。

router.route('/profile')
  .get(function(req, res) {
    if(req.session.auth) {
      res.json({
        user: req.user.toObject({getters: true})
      });
    } else {
      res.status(HttpStatus.UNAUTHORIZED);
      res.json({
        message: 'You need to be logged in to view this information'
      });
    }
  });

mocha と superagent を使用してこのエンドポイントをテストしたい場合、どうすればよいでしょうか? mocha フレームワークを使用して、everyauth でログインをシミュレートするにはどうすればよいですか。

現在、以下に示すテストがあります。

  it('should return user information on being logged in', function(done) {
    superagent.get(url + '/users/profile').end(function(err, res) {
      expect(res.status).to.equal(200);
      expect(res.body).to.eql({
          users: // some user object
      });
      done();
    });
  });

ただし、ログインをシミュレートできない限り、エンドポイントへの呼び出しを介して正しいデータが返されているかどうかをテストできません。

4

1 に答える 1

1

確かに、これに対する 1 つの解決策は、非常に人気のあるSinonスタブなどのモック/スタブ フレームワークを使用して、テスト目的で認証モジュールをモックすることです。Sinon を使用すると、関数を「オーバーライド」して、その関数を実行する代わりに、必要なものを何でも返すことができます。

everyauth に慣れていない場合は、次のようなものが必要になります。

sinon.stub(everyauth, "authenticateUser").yields(null, {
    user: {
        firstName: 'John',
        // etc.
    }
});

everyauth がメイン オブジェクトで、authenticateUser がスタブするメソッドであり、yield は "authenticateUser" が通常返すものとまったく同じものを返す必要があるため、これは通常返される Facebook User オブジェクトを返すことができるため、引き続き機能のテストを行うことができます。アプリ。

于 2015-09-20T21:16:04.303 に答える