Qunit 异常测试

Qunit exception testing

通过查看,我未能找到当前问题的答案:

我有一个自定义异常(根据this guide设计):

let StrictOverwrite_destination_error = function(message) {
    var error = new Error(message);
    error.name = "utils_misc.StrictOverwrite_destination_error";    
    throw error;
};

我从函数 strictOverwrite:

中抛出的
function strictOverwrite ( destination, source, debug ) {

    // lots of code snipped

        else if ( !destination.hasOwnProperty( property ) && source.hasOwnProperty( property ) )
        {
            throw new StrictOverwrite_destination_error(
                "source.property exists, but destination.property doesn't" );
        }

    // more code snipped

    return destination;
}

错误和函数都在我的模块 utils_misc 中定义,尽管我的自定义异常定义不是从命名空间导出的。

这是我测试 strictOverwrite 函数抛出异常的方式:

assert.throws(
    function() {
        utils_misc.strictOverwrite(c, c_dominator, false);
    },
    function(error) {
        return error.name === "utils_misc.StrictOverwrite_destination_error";
    }
);

但是,唉,Qunit 并不满意:

Expected:   

function( a ){
  [code]
}

Result:     

{
  "message": "property is not defined",
  "name": "ReferenceError"
}

Diff:   

function( a ){
  [code]{
  "message": "property is not defined",
  "name": "ReferenceError"
}

除了整个事情不起作用之外,让我困惑的一件事是 Qunit 是如何获得这条消息的:"property is not defined"。这不完全是我的自定义 StrictOverwrite_destination_error 异常产生的消息。

这道题写的测试代码运行的很好。问题出在正在测试的 application 代码中。