摩卡'在每个钩子之前'错误消息

时间:2017-06-01 13:50:59

标签: javascript node.js testing mocha

我在测试失败之前收到以下消息

以下是我的代码

before(function(done) {
  function afterListening() {
    customFormats(ZSchema);
    done();
  }

  if (app.server.listening) return afterListening();

  app.on('listening', afterListening);
});

describe('/a1/{exampleID}', function() {
  describe('get', function() {
    it('should respond with 200 Return an array of shelter...', function(done) {
      /*eslint-disable*/
      var schema = {
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "meta": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "resource": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "fully qualified URL call"
              },
              "version": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "version of API being called"
              },
              "response": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32",
                "description": "status code"
              },
            "required": [
              "version",
              "resource"
            ]
          } 
        }
      };

      /*eslint-enable*/
      api.get('/a1/example/64442')
      .set('Content-Type', 'application/json')
      .expect(200)
      .end(function(err, res) {
        if (err) return done(err);

        validator.validate(res.body, schema).should.be.true;
        done();
      });
    });
});
});

错误 1)示例“每个”之前的钩子:      错误:超过200毫秒的超时。确保正在进行done()回调       在这个测试中调用。       在null。 (LIB / runnable.js:170:19)

只有在我的机器上运行测试用例时才出现此错误。如果我在另一台机器上运行相同的测试用例,则测试用例正在通过。为什么会这样。看起来很奇怪。

请帮忙!!

2 个答案:

答案 0 :(得分:1)

当您没有按预期返回承诺时,通常会收到超时错误。

完成相同的旧实现,但不再需要。如果您使用的是最新版本的Mocha,则应该只能返回promise,而不是调用Done()。

以下是mocha-as-promised的详细信息 - 自版本1.18.0起与默认Mocha集成。

您应该如何回复承诺的示例:

it("should be fulfilled with 5", function () {
  return promise.should.become(5);
});

如果是之前 - 实现应该如下所示:

beforeEach(() => {
 const {col1, comments} = mongoose.connection.collections;

 return col1.drop(() => {
    // Do something after collection is dropped
 });
});

请注意返回之前采取的行动。

答案 1 :(得分:-1)

您能否请我们与我们分享您的事情,以便我们提供帮助?

不看,可能是因为你与你所连接的任何东西的联系都没有按时响应或根本没有响应。

可能想要检查您与单元测试所连接的地方的连接(可能是数据库,因为它在beforeEach()beforeEach()中并不存在需要在其中调用done()

将超时时间增加到10秒左右。如果您没有收到数据库错误,那么您的连接速度很慢。如果即使在10秒内仍然出现超时错误,您可能根本就没有连接。