【问题标题】:How do you unit test Javascript Promises using Jasmine.js?你如何使用 Jasmine.js 对 Javascript Promises 进行单元测试?
【发布时间】:2014-05-23 21:21:08
【问题描述】:

正确使用Jasmine单元测试函数的常见、正确或可接受的方法是什么?

示例承诺:

function readFile(filename, enc) {
  return new Promise(function (fulfill, reject) {
    fs.readFile(filename, enc, function (err, res) {
      if (err) reject(err);
      else fulfill(res);
    });
  });
}

function readJSON(filename) {
  return new Promise(function (fulfill, reject) {
    readFile(filename, 'utf8').done(function (res) {
      try {
        fulfill(JSON.parse(res));
      } catch (ex) {
        reject(ex);
      }
    }, reject);
  });
}

解决方案应包含对上述示例代码的测试。谢谢!

【问题讨论】:

  • 改用 mocha,mocha 支持开箱即用的 Promise,因为最近的版本,您只需返回一个 Promise,如果它拒绝,它将无法通过测试。
  • 另外,promise 构造函数是安全的,你可以只使用fulfill(JSON.parse(res))(在延迟对象中你不能这样做)。
  • @BenjaminGruenbaum try catch 在回调内部,而不是 promise 构造函数。
  • @Esailija 你当然是对的,readFile 本身就是一个承诺,但 OP 出于某种原因正在使用.done

标签: javascript unit-testing jasmine client-side promise


【解决方案1】:

您可以考虑使用Jasminum。我为 Promise 设计了它,使用 Q Promise,但它可以使用任何符合 Promise 的构造函数。

describe("readFile", function () {
    it("reads a file", function () {
        return readFile(__filename)
        .then(function (content) {
            expect(content).toContain("Unlikely nonce: Xebrohio!");
        });
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2010-09-07
    • 2017-06-10
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多