挂钩 assert.* 函数

Hook into assert.* functions

背景:我有一组在模板引擎中使用的函数,它们的输出总是转换为字符串。这意味着在测试它们时,我真正感兴趣的是它们的字符串表示形式。

是否有任何方法可以“挂钩”到 assert.*() 以在每次断言之前修改输入?

这样我就不用每次都显式地转换输出了:

  it("should foo bar", () => {
    assert.strictEqual("" + myFunction1(foo), "bar")
    assert.strictEqual("" + myFunction1(baz), "fiz")
  })

更改断言函数不是一个好主意,因为对 assert.strictEqual 的任何其他调用都会对您造成 谎言,从而产生意外的输出。例如。 assert.strictEqual(true, true) 将 return false 因为 ""+true 不等于 true.

更好的选择是使用实用函数来代理所有 assert.strictEqual 调用:

function assertWithCast (val1, val2) {
    assert.strictEqual("" + val1, val2)
}

然后在你的测试中使用它:

it("should foo bar", () => {
  assertWithCast(myFunction1(foo), "bar")
  assertWithCast(myFunction1(baz), "fiz")
})