我正在尝试为我编写的函数编写一个 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/