【问题标题】:'then' function is not never getting called by Mocha for assertion checking'then' 函数不会被 Mocha 调用以进行断言检查
【发布时间】:2015-01-22 06:45:55
【问题描述】:

我在 Mocha 中编写了以下测试用例,其中我的代码使用 Q 模块。

var expect = require("chai").expect;
var utils = require("../Utils.js");
var utils1 = require("../a.js");
var sinon = require('sinon');
var request = require('requestretry');
var querySys = require('../b.js');
var Q = require("q");

describe("Sample", function () {
    var results;
    describe("#get()", function () {
        before(function (done) {
            done();
        });
        it("equal", function () {
            var deferred = Q.defer();
            var responseData = {};
            responseData.code = 200;
            responseData.data = [{a:1,b:2}];
            deferred.resolve(responseData);
            //querySys1 method uses Q promises. That is how I stubbed the response.
            sinon.stub(querySys, 'querySys1').returns(deferred.promise);

            //get function internally calls querySys1. Hence I have stubbed that.
            results = utils1.get(specification);
            results.then(function (data) {
                //Here I do see data coming as {in:1, out:1}. But still the test case is passing when compare it with {}.
                console.log(data);
                //Ideally, it should have failed. But it is passing.
                expect(data).to.be.equal({});
            });
        });
        after(function (done) {
            done();
        })
    });
});

所以,如果你看到了,我正在尝试在results.then 部分进行断言检查。我已经打印了我收到的回复。这正如预期的那样。 但我故意尝试匹配错误的值,但测试用例仍然通过。

【问题讨论】:

    标签: node.js mocha.js q sinon chai


    【解决方案1】:

    由于您的测试不包含回调,因此执行将通过主块运行并声明测试通过,而无需等待then 函数的结果。你需要让 mocha 知道等待回调:

    it("equal", function (done) {
        ...
        results.then(function (data) {
            console.log(data);
            expect(data).to.be.equal({});
            return done();
        });
    });
    

    【讨论】:

    • 现在它抛出以下错误:Error: timeout of 2000ms exceeded。但即使我在更短的时间内得到结果。因为console.log(data) 打印输出非常快。
    【解决方案2】:

    当我将 results.then 更改为 results.done 时,测试开始按预期失败。有人可以说这是否是正确的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多