0

我正在尝试从 /signing 获取我的令牌变量,以将其提供给名称更改路线。但断言并不总是触发。有没有更好的方法来做到这一点?我可以使用 async-await 来解决这个问题吗,如果可以,如何解决?

describe("setName", function (done) {
    it("/POST user setName", function (done) {
        Users.remove({}, (err) => {
            console.log(chalk.bgBlue(`Removing User`));
            // done();
        });
        let user = {
            "email": "tiwari.ai.harsh@gmail.com",
            "password": "password",
            "name": "Harsh Tiwari"
        }
        var requester = chai.request(app).keepOpen()

        requester.post("/api/users/signin").send({
            user
        }).end((err_signin, res_signin) => {

            let token = res_signin.body.user.token;
            let name = "Name Changed"

            requester.post("/api/users/setName").set({ authorization: `Token ${token}` }).send({
                name
            }).end((err, res) => {
                res.should.have.status(200); <--------------------------- This is not working
            });

            done()
        });
    });
});
4

1 回答 1

0

当前代码将在完成done之前执行,requester.post("/api/users/setName")因为它是异步执行。

为了解决这个问题,done()应该在后面指定res.should.have.status(200);

describe('setName', function (done) {

  // NOTE: I also moved remove function here to ensure user is removed correctly
  before(function(done) {
    Users.remove({}, (err) => {
      console.log(chalk.bgBlue(`Removing User`));
      done(); // NOTE: also specify done to tell mocha that async execution is finished
    });
  })

  it('/POST user setName', function (done) {
    let user = {
      email: 'tiwari.ai.harsh@gmail.com',
      password: 'password',
      name: 'Harsh Tiwari',
    };
    var requester = chai.request(app).keepOpen();

    requester
      .post('/api/users/signin')
      .send({
        user,
      })
      .end((err_signin, res_signin) => {
        let token = res_signin.body.user.token;
        let name = 'Name Changed';

        requester
          .post('/api/users/setName')
          .set({ authorization: `Token ${token}` })
          .send({
            name,
          })
          .end((err, res) => {
            res.should.have.status(200);
            done(); // NOTE: move here
          });        
      });
  });
});

于 2020-12-17T11:54:47.653 回答