代码之家  ›  专栏  ›  技术社区  ›  Pranay Tripathi

Jest Sprowing TyperError:在使用lodash管道/流时应为函数

  •  0
  • Pranay Tripathi  · 技术社区  · 7 年前

    我有以下代码:

    function sort() {
       let array1 = [{ value:1 }, { value:2 }, { value:3 }];
       let array2 = [{ code:1 }, { code:2 }, { code:3 }];
       const constructSortedArray = pipe(
         sortBy(array1, element => element.value),
         sortedArray1 => sortedArray1.concat(array2)
       );
       return constructSortedArray();
     }
    

    lodash/fp/flow 作为管道别名和 lodash/sortBy . 当运行代码时,该函数工作正常,但当使用jest测试代码时,我发现以下错误 pipe :

    TypeError: Expected a function 
    
    > 73 |     const constructSortedArray = pipe(
    

    我已经试过设置 testEnviornment jsdom node 但这并没有帮助。这个 automock 也不能开玩笑。

    感谢您的帮助。

    0 回复  |  直到 7 年前
        1
  •  2
  •   Ori Drori    7 年前

    当你打电话的时候 sortBy 它返回结果,而不是函数。您可以通过使用arrow函数并使用 array1 作为论据。

    注意:lodash没有 _.pipe() 方法(它的名称为 _.flow() _.flow()

    const { flow, sortBy } = _;
    
    function sort() {
      let array1 = [{ value:1 }, { value:2 }, { value:3 }];
      let array2 = [{ code:1 }, { code:2 }, { code:3 }];
      const constructSortedArray = flow(
        arr => sortBy(arr, element => element.value),
        sortedArray1 => sortedArray1.concat(array2)
      );
      return constructSortedArray(array1);
    }
     
    console.log(sort());
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

    一个更干净的选择将是给用户 _.partialRight() 要返回已应用最右边参数的函数,请执行以下操作:

    const { flow, partialRight, sortBy, concat } = _;
    
    function sort() {
      let array1 = [{ value:1 }, { value:2 }, { value:3 }];
      let array2 = [{ code:1 }, { code:2 }, { code:3 }];
      
      const constructSortedArray = flow(
        partialRight(sortBy, element => element.value),
        partialRight(concat, array2)
      );
    
      return constructSortedArray(array1);
    }
    
    console.log(sort());
    <脚本src=”https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js“></脚本>

    const { pipe, partialRight, sortBy, concat } = _;
    
    function sort() {
      let array1 = [{ value:1 }, { value:2 }, { value:3 }];
      let array2 = [{ code:1 }, { code:2 }, { code:3 }];
      
      const constructSortedArray = pipe(
        sortBy(element => element.value),
        partialRight(concat, [array2])
      );
    
      return constructSortedArray(array1);
    }
    
    console.log(sort());
    <script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>