我的JavaScript断言库如何返回传递?

时间:2018-01-15 18:52:09

标签: javascript unit-testing mocha assert

我正在开发一个自定义Javascript断言库,主要用于像Mocha这样的测试运行器。

当测试失败时,通过抛出错误,库可以正常工作。但是,当没有错误抛出时,我无法弄清楚如何让库返回“传递”。

我曾尝试阅读其他图书馆的内容,例如Do和Chai,但未能找到这方面。

这是我的断言库my-assert-lib.js

module.exports = function(input){
    var methods = {
        compare: function(comparison){
            if(input != comparison){
                throw new Error("The comparison string didn't match")
            }
            else{
                return
            }
        }

    }
    return methods
}

这是我的test.js,我正在使用Mocha执行:

var myAssertLib = require("./my-assert-lib.js")("correct");

describe("The comparison string", function(){
    it('should match the library input', function(doc) {
        myAssertLib.compare("incorrect")
    });

    it('should match the library input', function(doc) {
        myAssertLib.compare("correct")
    });
})

我得到了这些结果:

  0 passing (2s)
  2 failing

  1) The comparison string
       should match the library input:
     Error: The comparison string didn't match
      at Object.compare (my-assert-lib.js:5:23)
      at Context.<anonymous> (test.js:10:21)

  2) The comparison string
       should match the library input:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

第一次测试立即退出,应该如此。但是,第二次测试超时了。当没有什么东西可以投掷并且测试运行器应该继续时,my-assert-lib.js需要做什么?

1 个答案:

答案 0 :(得分:0)

我无法说明原因,但是mocha希望您拨打done功能。

  

错误:超出2000毫秒超时。对于异步测试和挂钩,请确保&#34; done()&#34;叫做;如果返回Promise,请确保它已解决。

这样做会产生一次通过,一次失败,如预期的那样。

describe("The comparison string", function(){
    it('should match the library input', function(done) {
        myAssertLib.compare("incorrect")
        done()
    })
    it('should match the library input', function(done) {
        myAssertLib.compare("correct")
        done()
    })
})

>   The comparison string
>     1) should match the library input
>     ✓ should match the library input
> 
> 
>   1 passing (14ms)   1 failing
> 
>   1) The comparison string
>        should match the library input:
>      Error: The comparison string didn't match
>       at Object.compare (assertLib.js:7:23)
>       at Context.<anonymous> (test.js:7:21)