Search code examples
node.jsmocha.jssupertest

supertest - res/req is not defined


I'm new to supertest and am trying to figure out a simple task. I have a post request I'm testing, which assigns a userkey like so:

app.post('/game/:username', function(req, res){

    var image = req.body.image;
    var userName = req.params.username;
    var userKey = '';
    if(userName === 'player1'){
      userKey = 'player_1_id';
    } else if(userName === 'player2'){
      userKey = 'player_2_id';
    } else if(userName === 'player3'){
      userKey = 'player_3_id';
    } else {
      userKey = 'player_4_id';
    }}

when I try and test this, I keep getting "res is not defined" and I don't know why!

  it('assigns a user key properly', function(done) {
    request(app)
      .post('/game/:username')
      .send({
        image: "image/png",
        username: "player1",
        userKey: ""
      })
      .expect(201)
      .expect(res.body.should.have.property("userKey"))

    // .expect()


    .end(function(err, res) {
      if (err) return done(err);

      done();
    })

  })

Solution

  • Your error is because you do not define res in your expect.

    You can check .expect(function(res) {}) document part in github/supertest.

    Try this:

      it('assigns a user key properly', function(done) {
        request(app)
          .post('/game/:username')
          .send({
            image: "image/png",
            username: "player1",
            userKey: ""
          })
          .expect(201)
          .expect(function(res){
             res.body.userKey!=undefined
          })
    
        // .expect()
    
    
        .end(function(err, res) {
          if (err) return done(err);
    
          done();
        })
    
      })