Javascript 如何编写茉莉花自定义匹配器

Javascript 如何编写茉莉花自定义匹配器,javascript,testing,jasmine,matcher,Javascript,Testing,Jasmine,Matcher,我正在尝试编写一个自定义匹配器,用于测试字符串是否包含不同字符串的特殊次数。这就是我所做的 var matcher = { toContainTimes: function (expected, num) { return { compare: function(actual){ actual.match(new RegExp(expected, "g") || []).length == num;

我正在尝试编写一个自定义匹配器,用于测试字符串是否包含不同字符串的特殊次数。这就是我所做的

var matcher = {
    toContainTimes: function (expected, num) {
        return {
            compare: function(actual){
                actual.match(new RegExp(expected, "g") || []).length == num;
            }
        }
    }
}
但我在执行此操作时出错:

TypeError: Cannot read property 'pass' of undefined
我的测试如下所示:

expect(queryString).toContainTimes("&", 2);
如果字符串“&”在queryString中正好出现两次,则返回true。 我做错了什么?

来自文档:

比较函数必须返回一个结果对象,并通过一个过程 属性,该属性是匹配器的布尔结果。通行证 属性告诉期望匹配器是否成功 (正确)或不成功(错误)

您应该返回一个声明了此类属性的对象

试试这个:

var matcher: {
    toContainTimes: function () {
        return {
            compare: function(actualValue, expectedResult){
                var expected = expectedResult[0];
                var num = expectedResult[1];
                var result = {
                    pass: true,
                    message: ''
                }
                result.pass = actualValue.match(new RegExp(expected, "g") || []).length === num;

                if(!result.pass)
                    result.message = 'insert error message here. this will shown when the jasmine spec failed';

                return result;
            }
        }
    }
}
用法:
expect(queryString).toContainTimes([“&”,2])

来自文档:

比较函数必须返回一个结果对象,并通过一个过程 属性,该属性是匹配器的布尔结果。通行证 属性告诉期望匹配器是否成功 (正确)或不成功(错误)

您应该返回一个声明了此类属性的对象

试试这个:

var matcher: {
    toContainTimes: function () {
        return {
            compare: function(actualValue, expectedResult){
                var expected = expectedResult[0];
                var num = expectedResult[1];
                var result = {
                    pass: true,
                    message: ''
                }
                result.pass = actualValue.match(new RegExp(expected, "g") || []).length === num;

                if(!result.pass)
                    result.message = 'insert error message here. this will shown when the jasmine spec failed';

                return result;
            }
        }
    }
}

用法:
expect(queryString).toContainTimes([“&”,2])

您不会
从匹配器返回任何内容。您不会
从匹配器返回任何内容。