我读到有关supertest的信息。我设法测试了两条路线:

it('notAuthorized', function (done) {
    request.agent(server)
        .get('/notAuthorized')
        .expect('Content-Type', /html/)
        .expect(200)
        .expect(/Not authorized!/)
        .end(done)
})

it('redirect', function (done) {
    request.agent(server)
        .get('/no-valid-route')
        .expect('Content-Type', /plain/)
        .expect(302)
        .expect('Location', '/notAuthorized')
        .expect(/Moved Temporarily/)
        .end(done)
})

但是,当我要访问我需要注册的其他页面时,问题就开始了。我发现此解决方案可以进行常规注册:
describe('When logged in', function () {
    before(function (done) {
        // login the user
        agent
            .post('/users/session')
            .field('email', '[email protected]')
            .field('password', 'foobar')
            .end(done)
    })

    // ...
})

在我的申请中,我注册了证书。我可以用我的证书以某种方式配置测试吗?更改我的https选项也不起作用:
///////////////////
// https options
var options = {
    // ...
    requestCert: false,
    rejectUnauthorized: false
};

我认为这是因为我在每条 route 都使用了中间件:
 exports.isAuthenticated = function(req, res, next){
    if(req.client.authorized) {
        // user authorized
        if(!req.session.user) {
            // set user session
            var cert = req.connection.getPeerCertificate().subject;
        // ..
// profile
app.get("/profile", mw.isAuthenticated, profileController.getProfile);

// user
app.get("/users", mw.isAuthenticated, userController.getUsers);

// chat
app.get("/chat", mw.isAuthenticated, chatController.getChat);

问题:
  • 无论如何,我可以使用证书配置代理吗?
  • 我是否应该考虑在每条 route 使用isAuthenticated中间件的设计?
  • 我可以以某种方式更改supertest代理的cookie对象吗?

  • 如果我可以像下面的代码片段那样设置req对象,则可能会有解决方案。
        req : {
            client : {
                authorized : true
            },
            connection :{
                getPeerCertificate : function(){
                    this.subject = 1;
                }
            }
        }
    

    最佳答案

    简短的答案是,您必须对lib/node/index.js中的supertest的TestAgent类,superagent的Agent类和superagent的“请求”导出进行修补。

    Superagent仅设计用于跟踪与服务器关联的CA,据我所知,supertest甚至不支持该代理。底层请求实际上是在index.js中提出的,并且没有API Hook 到您需要传递的任何cert或key选项中。

    09-25 18:26