断言错误对 mocha 没有影响

Assertion errors have no effect in mocha

我正在尝试为一个简单的 MEAN 应用程序构建测试。

下面的代码有效,但如果在 pyshe.save 函数内出现任何断言错误,它们不会转发给 gulp 并且测试仍然通过。其他一切都按预期工作。

//test.js
var assert = require('assert');
var mongoose = require('mongoose');
var userSchema = require('./userSchema');
var periodSchema = require('./periodSchema');


var connection = mongoose.connect('mongodb://localhost:21846/test');

describe('Mongoose Schemas', function() {
var Period = mongoose.model('Period', periodSchema);
var User = mongoose.model('User', userSchema);
var succeeded = 0;

describe('Period Model', function() {
  it('accepts dates', function() {
      var pyshePeriod = new Period({
          start: new Date("2015-12-05"),
          end: new Date("2015-12-10")
      });
      ++succeeded;
  });

  it('matches the `start` date', function() {
      var pyshePeriod = new Period({
          start: new Date("2015-12-05"),
          end: new Date("2015-12-10")
      });
      assert.equal(
              pyshePeriod.start.toString(),
              "Sat Dec 05 2015 05:30:00 GMT+0530 (IST)"
          );
      ++succeeded;
  });

  it('matches the `end` date', function() {
      var pyshePeriod = new Period({
          start: new Date("2015-12-05"),
          end: new Date("2015-12-10")
      });
      assert.equal(
              pyshePeriod.end.toString(),
              "Thu Dec 10 2015 05:30:00 GMT+0530 (IST)"
          );
      ++succeeded;
  });

  it('refers the user_id', function() {
      var pyshe = new User({
          name: 'Banana Apple Pineapple'
      });
      var pyshePeriod = new Period({
          start: new Date("2015-12-05"),
          end: new Date("2015-12-10"),
          user: pyshe._id
      });
      assert.equal(pyshePeriod.user, pyshe._id);
  });

  it('populates the user', function() {
      var pyshe = new User({
          name: 'Banana Apple Pineapple',
          age: 27
      });

      pyshe.save(function (err) {
          if (err) {
              console.log(err);
          };

          var pyshePeriod = new Period({
              start: new Date("2015-12-05"),
              end: new Date("2015-12-10"),
              user: pyshe._id
          });

          pyshePeriod.save(function (err) {
              if (err) {
                  console.log(err);
              };
          });

          var period = Period
          .findOne({_id: "56c7eee3e4292384197f3d30"})
          .populate('user')
          .exec(function (err, period){
              if (err) {
                  console.log(err);
              };
              assert.equal(2, 3); //no error in mocha
          });
      });
  });     
});

describe('User Model', function() {
    it('accepts names', function() {
      var pyshe = new User({
          name: 'Banana Apple Pineapple'
      });
      assert.equal(pyshe.name, 'Banana Apple Pineapple');
      ++succeeded;
  });

  it('accepts age', function() {
      var pyshe = new User({
          age: 27
      });
      assert.equal(pyshe.age, 27);
    });
  });
});

剩余代码在https://github.com/psiyan/kobi/

使用 Mocha 测试异步代码可以在测试完成时简单地调用回调。通过向 it() 添加回调(通常命名为 done)。 Mocha 会知道它应该等待完成。

it('populates the user', function(done) {
      var pyshe = new User({
          name: 'Banana Apple Pineapple',
          age: 27
      });

      pyshe.save(function (err) {
          if (err) {
              done(err);
          };

          // other case
          done();