javascript - Jasmine 测试没有看到嵌套函数

标签 javascript closures jasmine nested-function

我正在尝试为我编写的函数编写一个 Jasmine 测试,该函数通过日期属性“过滤”出三个最近的对象。我不断收到错误:
类型错误:无法调用未定义的方法“filterTopPricepoints”

我的 JavaScript:

function viewSingleProduct(){
prod_id = document.URL.substring(document.URL.lastIndexOf('?')+4);
viewProductFields();
viewTopThreePricepoints();

function viewProductFields() {
    // AJAX CALL APPENDING DATA TO SCREEN
};

function viewTopThreePricepoints(){

    getAllPricepoints();
    function getAllPricepoints(){
        // AJAX CALL TO APPEND PRICEPOINTS TO SCREEN
    }

    function filterTopPricepoints(allPricepointsArray, limit){
        var result = [];
        function compareDates(a,b) {
            if (a.date < b.date){
                return -1;
            }
            if (a.date > b.date){
                return 1;
            }
                return 0;
        }
        allPricepointsArray.sort(compareDates);
        allPricepointsArray.reverse();
        console.log(allPricepointsArray);
        for (var i = 0; i < limit; i++){
            result.push(allPricepointsArray[i]);
        }
        return result;
    }
}
}

还有我的 Jasmine 测试:

describe("View Single Product Tests", function() {

  it("Filters three pricepoints by date", function() {

  var pp1 = {date: "2014-02-25"};
  var pp2 = {date: "2014-02-26"};
  var pp3 = {date: "2014-02-27"};
  var ppArray = []
  ppArray.push(pp1);
  ppArray.push(pp2);
  ppArray.push(pp3);
  var filteredArray = viewSingleProduct.viewTopThreePricepoints.filterTopPricepoints(ppArray, 3);
  expect(filteredArray).toBe([{date: "2014-02-27"}, {date: "2014-02-26"}, {date: "2014-02-25"}]);
  }); 
});

我无法判断是我在 Jasmine 端访问函数时出错,还是在 JS 端使用闭包时出错。任何正确方向的点都会有所帮助。

最佳答案

您的函数filterTopPricepoints()viewTopThreePricepoints()内是“私有(private)”的(就像局部变量一样)。因此无法从 jasmine 测试访问它。

一个可能的解决方案是将函数移出其他函数:

function viewSingleProduct(){
    ...
    function viewTopThreePricepoints(){
      ...
    }
}

function filterTopPricepoints(allPricepointsArray, limit){
     ...
}

关于javascript - Jasmine 测试没有看到嵌套函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22256909/

相关文章:

javascript - 如何将 json block 作为文件发送给用户

循环内的 JavaScript 闭包 – 简单的实际示例

angularjs - BeforeAll 未定义(老 Jasmine )

javascript - 使用搜索字符串来定位单元格

javascript - 关于这个 JavaScript 计算器我不明白的三件事

javascript - 带有事件监听器的多个图表 - 如何查找哪个图表触发了监听器?附测试用例和截图

javascript - 此函数中 Array() 的上下文

javascript - 为 Angular 设置 Jasmine/karma

php - 如何从 ePub 图书写入服务器

javascript - jasmine - javascript 测试闭包