応答後のスーパーテストでの「req」オブジェクトへのアクセス

圧力

リクエストのテスト中/テスト後reqsupertest、でオブジェクトに直接アクセスする方法はありますか?私は私のテストしたいpassportの戦略を、私は確認したいreq.userreq.sessionと、おそらく他の人。ページリダイレクトまたはフラッシュをテストできることはわかっています。これは私の戦略であるためですが、reqオブジェクトにユーザーがいるかどうかを確認することも役立つようですこれを行うと、一度に何人のユーザーがいるかを確認することもできます。

このように定義された「ローカルサインアップ」戦略でユーザーをサインアップします。

'use strict';

// get passport & mongoose
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var UserModel = require('mongoose').model('User');

module.exports = function() {

    // signup function
    passport.use('local-signup', new LocalStrategy({
            passReqToCallback: true // pass the entire request to the callback
        },

        function(req, username, password, done) {

            process.nextTick(function() {

            // find a user with the same username
                UserModel.findOne({username: username}, function(err, user) {

                    // if there is an error, log it then return it
                    if(err) {
                        console.log("Error finding a user in the database: " + err);
                        return done(err);
                    }

                    // if a user was already found
                    if(user) {
                        return done(null, false, "User already exists");
                    }

                    // if we get this far, create a new user from the request body
                    var newUser = new UserModel(req.body);

                    // save it and sign it in
                    newUser.save(function(err) {
                        if(err) {
                            console.log("Error during signup: " + err);
                            return done(err);
                        }
                        return done(null, newUser);
                    });

                });

            });

        }

    ));

};

この戦略を使用する1つの方法は、次のとおりです。

私の「ローカル」戦略は次のように定義されています。

'use strict';

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var UserModel = require('mongoose').model('User');

module.exports = function() {

    // create our local passport strategy & use it
    passport.use(new LocalStrategy({

            // use the default names for the username & password fields
            usernameField: 'username',
            passwordField: 'password'
        },

        // main strategy function
        function(username, password, done) {

            // find user with given username
            UserModel.findOne({
                username: username
            },

            // with this username, do this
            function(err, user) {

                // if there's an error, log it then pass it along
                if(err) {
                    console.log("Error during login: " + err);
                    return done(err);
                }

                // if the username and/or password is incorrect, return an error
                // along with a message
                if(!user || !user.authenticate(password)) {
                    return done(null, false, {
                        message: 'Invalid username and/or password'
                    });
                }

                // if everything is correct, return the user document from the database
                return done(null, user);

            });
        }

    ));
};

たとえば、次のような両方の戦略を使用します。

app.route(pageName).post(function(req, res, next) {
    passport.authenticate(strategyName, function(err, user, info) {
        if(err || !user) {
            res.status(401).send(info);
        }
        else {
            req.login(user, function(err) {
                if(err) {
                    res.status(400).send(err);
                }
                else {
                    res.send(null);
                }
            });
        }
    })(req, res, next);
});

私は試した

request = require('supertest');
this.authServer = require('../my-server');

request(this.authServer)
    .put('/signup')
    .set('Content-Type', 'application/json')
    .set('Host', 'konneka.org')
    .send(this.fullUser)
    .end(function(req, res, done) {
        console.log(res);
    });

res私がログインしたオブジェクトは、内部でend()ここに表示するにはあまりにも長い道のりだった機能、持っているreqそれに定義されたオブジェクトを、それだけで定義されたオブジェクト&機能持っていると思われる前に、要求が開かれましたが。言い換えれば、それは持っていないreq.userreq.sessionまたはそれらが定義されているため、他のオブジェクトは、私が、欲しいの後にリクエストが完了すると、新しい要求が開始されます。リクエストが完了した後にのみ定義されるステータスコードもあることに気づいたので、何かが足りないに違いありません。

reqテストしているリクエストが終了した後、オブジェクトにアクセスする方法はありますか?それとも私はこれを完全に間違った方法で行っていますか?

mattr

を使用してやりたいことを行うことはできませんsupertest

これが役立つかどうかはわかりませんが、答えを明確にするために少しコンテキストを追加します。

supertestsuperagent(クライアント側)の上にあるラッパーでありexpress、HTTPリスナーを起動するためのいくつかの基本的なフックがあります。内部的には、Expressアプリを起動し、ポートでリッスンするのを待って、そのポートにHTTPリクエストを送信し、結果を解析するのとまったく同じです。実際、それはまさにそれが行うことです。

したがって、基本的にsupertestは、クライアントがアクセスできるもの(ブラウザーまたは一部のAPIクライアント)にのみアクセスできます。つまり、HTTP応答本文にない場合は、アクセスできません。req.userおよびreq.sesssionはサーバー側の状態変数であり、(ほとんどの場合)応答に含まれていません(何か奇妙なことをしている場合を除く)。

説明したとおりにテストする場合は、ではなく、テストの代替戦略を使用する必要がありますsupertest

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Slim3応答オブジェクトのデータへのアクセス

分類Dev

マングース応答のオブジェクトプロパティにアクセスできません

分類Dev

サービス応答内のオブジェクトにアクセスできません

分類Dev

パイプ内のNestJSアクセス応答オブジェクト

分類Dev

テンプレート内のオブジェクトへのアクセス

分類Dev

ajax応答のjsonオブジェクトのアクセスリスト

分類Dev

Firebase RealtimeDatabaseルールセットのオブジェクトプロパティへのアクセス

分類Dev

JSONPの応答テキストへのアクセス。複数のオブジェクトをテキストにフラット化する

分類Dev

ネストされたforループ内のスーパーテスト応答後に変更されたオブジェクトの問題

分類Dev

Javascriptオブジェクトキーへのアクセス

分類Dev

Firebaseデータオブジェクトへのアクセス

分類Dev

配列オブジェクトのプロパティへのアクセス

分類Dev

同じオブジェクト内のオブジェクトプロパティへのアクセス

分類Dev

Sailsアプリにロードした後のVueのオブジェクトプロパティへのアクセス

分類Dev

要求/応答全体のオブジェクトの保存とアクセス

分類Dev

リソース内のオブジェクトへのアクセス(WPF)

分類Dev

雪片:データベースオブジェクトへのアクセス

分類Dev

オブジェクトプロパティへのAngular動的アクセス

分類Dev

PHP7オブジェクトプロパティへのアクセス

分類Dev

JSでオブジェクトのプロパティへのアクセスをオーバーロードすることは可能ですか?

分類Dev

オブジェクト内のオブジェクトのキーと値へのアクセス

分類Dev

トークンと応答データへのアクセス

分類Dev

JavaFx:コントローラーオブジェクトへのアクセス

分類Dev

反応; オブジェクト内のフィールドへのアクセス

分類Dev

Blazeテンプレートでオブジェクトのプロパティ名にアクセスする

分類Dev

APIネストオブジェクトへのアクセス

分類Dev

マングース-オブジェクトのプロパティにアクセスできませんか?

分類Dev

Django:オブジェクトと参照オブジェクトのフィールドへのアクセス

分類Dev

JSONオブジェクトのキー値へのアクセス

Related 関連記事

  1. 1

    Slim3応答オブジェクトのデータへのアクセス

  2. 2

    マングース応答のオブジェクトプロパティにアクセスできません

  3. 3

    サービス応答内のオブジェクトにアクセスできません

  4. 4

    パイプ内のNestJSアクセス応答オブジェクト

  5. 5

    テンプレート内のオブジェクトへのアクセス

  6. 6

    ajax応答のjsonオブジェクトのアクセスリスト

  7. 7

    Firebase RealtimeDatabaseルールセットのオブジェクトプロパティへのアクセス

  8. 8

    JSONPの応答テキストへのアクセス。複数のオブジェクトをテキストにフラット化する

  9. 9

    ネストされたforループ内のスーパーテスト応答後に変更されたオブジェクトの問題

  10. 10

    Javascriptオブジェクトキーへのアクセス

  11. 11

    Firebaseデータオブジェクトへのアクセス

  12. 12

    配列オブジェクトのプロパティへのアクセス

  13. 13

    同じオブジェクト内のオブジェクトプロパティへのアクセス

  14. 14

    Sailsアプリにロードした後のVueのオブジェクトプロパティへのアクセス

  15. 15

    要求/応答全体のオブジェクトの保存とアクセス

  16. 16

    リソース内のオブジェクトへのアクセス(WPF)

  17. 17

    雪片:データベースオブジェクトへのアクセス

  18. 18

    オブジェクトプロパティへのAngular動的アクセス

  19. 19

    PHP7オブジェクトプロパティへのアクセス

  20. 20

    JSでオブジェクトのプロパティへのアクセスをオーバーロードすることは可能ですか?

  21. 21

    オブジェクト内のオブジェクトのキーと値へのアクセス

  22. 22

    トークンと応答データへのアクセス

  23. 23

    JavaFx:コントローラーオブジェクトへのアクセス

  24. 24

    反応; オブジェクト内のフィールドへのアクセス

  25. 25

    Blazeテンプレートでオブジェクトのプロパティ名にアクセスする

  26. 26

    APIネストオブジェクトへのアクセス

  27. 27

    マングース-オブジェクトのプロパティにアクセスできませんか?

  28. 28

    Django:オブジェクトと参照オブジェクトのフィールドへのアクセス

  29. 29

    JSONオブジェクトのキー値へのアクセス

ホットタグ

アーカイブ