编程语言
首页 > 编程语言> > javascript-如何编写茉莉花的自定义匹配器以查找对象属性是否在对象属性值的范围内?

javascript-如何编写茉莉花的自定义匹配器以查找对象属性是否在对象属性值的范围内?

作者:互联网

我正在尝试为Jasmine实现自定义匹配器,我想在其中检查给定的对象属性值是否在其他两个对象属性值的范围内.

这是到目前为止我得到的:

let matcher = {
            toLieWithin: function (util: jasmine.MatchersUtil, customEqualityTesters: Array<jasmine.CustomEqualityTester>): jasmine.CustomMatcher {
                return {
                    compare: function (actual: any, expected: any): jasmine.CustomMatcherResult {
                        let result: jasmine.CustomMatcherResult = {
                            pass: false,
                            message: ''
                        };

                        result.pass = liesWithin(actual, expected);

                        return result;
                    }
                }
            }
        }; 

function liesWithin<T>(objActual: T, objExpected: T[]): boolean {
        let output: boolean;
        if(objExpected) {
          output = objActual.x > objExpected[0].x && objActual.x < objExpected[1].x && objActual.y > objExpected[0].y && objExpected[1].y;
        }
return output;    
}

我假设在这里,实际值具有两个属性x和y.期望的是两个对象组成的数组,每个对象还具有两个属性x和y.

actual = {x: -5, y: -10}; expected = [{x: -10, y: -17},{x: 0, y: 0}];

现在,对于上面给出的简单示例,我相信这种情况是可行的.但是,当我尝试将其实现为泛型时,如何找到对象具有的属性?我的方法正确吗?谁能给我一些想法,我如何实现这种方法.

谢谢.

解决方法:

看起来您的liesWithin函数处在正确的轨道上,您只需要考虑预期对象可能无法按预期返回的情况.此代码也应涵盖以下情况:

// Helper to reduce repeated code
function isWithinRange(val, a, b) {
    return (val > a && val < b) || (val > b && val < a);
}

function liesWithin<T>(objActual: T, objExpected: T[]): boolean {
    if (objExpected) {
        let props = Object.keys(objActual);
        // Splitting X and Y checks into two for readability
        let isInYRange = isWithinRange( objActual[ props[0] ], objExpected[0][ props[0] ], objExpected[1][ props[0] ] );
        let isInXRange = isWithinRange( objActual[ props[1] ], objExpected[0][ props[1] ], objExpected[1][ props[1] ] );
        return isInXRange && isInYRange;
    }
    return;
}

标签:typescript,jasmine,jasmine-matchers,javascript
来源: https://codeday.me/bug/20191025/1927100.html