【问题标题】:Unhandled rejection AssertionError With Mocha未处理的拒绝 AssertionError 与 Mocha
【发布时间】:2018-01-16 19:00:08
【问题描述】:

我正在为我在 express 中创建的模块编写 Mocha 测试。它给了我一个错误,我不明白如何解决。

测试:

  describe('userController', function() {
    describe('post -> /create', function() {
      it('A user should be created', () => {
          var testRequest = {
              body: {
                  password:"pass1",
                  email:"test@me.com",
                  username:"user1",
              }
          };
          database.registerUser(testRequest, (callBack) => {
              new User({email:"test@me.com"})
              .fetch()
              .then((model) => {
                 assert.equal(model.get('password'), testRequest.body.password);
              })
              .catch((err) => {
                assert(false);
              });
          });
      });
    });
  });

错误:

Unhandled rejection AssertionError: false == true
    at User.fetch.then.catch (/home/shanedrafahl/code/MyRentalServer/myRental/test/test.js:72:17)
    at tryCatcher (/home/shanedrafahl/code/MyRentalServer/myRental/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/home/shanedrafahl/code/MyRentalServer/myRental/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/home/shanedrafahl/code/MyRentalServer/myRental/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/home/shanedrafahl/code/MyRentalServer/myRental/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/home/shanedrafahl/code/MyRentalServer/myRental/node_modules/bluebird/js/release/promise.js:689:18)
    at Async._drainQueue (/home/shanedrafahl/code/MyRentalServer/myRental/node_modules/bluebird/js/release/async.js:133:16)
    at Async._drainQueues (/home/shanedrafahl/code/MyRentalServer/myRental/node_modules/bluebird/js/release/async.js:143:10)
    at Immediate.Async.drainQueues (/home/shanedrafahl/code/MyRentalServer/myRental/node_modules/bluebird/js/release/async.js:17:14)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)

如果有人能告诉我或告诉我为什么它给我这个错误以及如何解决它,我将不胜感激。

【问题讨论】:

    标签: javascript express asynchronous mocha.js


    【解决方案1】:

    我认为你有两个问题。首先是实际问题。第二个是测试的问题。也许解决第二个问题会给你更多关于如何解决第一个问题的信息。

    我不熟悉 assert,但从您的堆栈跟踪来看,您似乎希望 assert 在这部分做其他事情:

    .catch((err) => {
      assert(false);    // <---- test problem is with the first param being false
    });
    

    解决方案(测试问题)

    我认为你真正想要的是打印err 的内容。有了它,您就可以完全理解为什么要访问catch

    由于您的测试是异步的,我认为您应该像这样使用done

    it('A user should be created', (done) => {  //added done param
    

    ...

    .then((model) => {
      assert.equal(model.get('password'), testRequest.body.password);
      done() // let mocha know the async test is done
    })
    .catch((err) => {
      done(err) // let mocha know the async test is done with an error, so it can display the error in the output
    });
    

    现在您应该能够测试您的代码以找出其他问题。

    您可以阅读有关使用 Mocha here: Mocha - Asynchronous Code 进行异步测试的信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 2016-07-21
      • 2021-12-30
      • 1970-01-01
      • 2019-03-14
      相关资源
      最近更新 更多