Javascript jest测试-类型错误:无法读取属性';过滤器';空的

Javascript jest测试-类型错误:无法读取属性';过滤器';空的,javascript,jestjs,Javascript,Jestjs,我对jest测试非常陌生,我很难理解jest是如何处理我要测试的函数的。我的问题是: 我正在尝试测试以下非常简单的函数,它将接收一个bookId,并在一个包含这样一个id的数组中找到对象 function catchSelectedBook(bookId) { const objectSearchAsString = localStorage.getItem('objecttransfer'); const booksObject = JSON.parse(objectSearchAsS

我对jest测试非常陌生,我很难理解jest是如何处理我要测试的函数的。我的问题是:

我正在尝试测试以下非常简单的函数,它将接收一个bookId,并在一个包含这样一个id的数组中找到对象

function catchSelectedBook(bookId) {
  const objectSearchAsString = localStorage.getItem('objecttransfer');
  const booksObject = JSON.parse(objectSearchAsString);
  const currentBook = booksObject.filter((book) => book.id === bookId);

  return currentBook;
}
单元测试Jest代码如下所示:

describe('Given a function that is given as argument the id', () => {
  test('When invoked, it finds the book that matches such id', () => {

   const returnMokObject = {
      kind: 'books#volumes',
      totalItems: 1080,
      items: [
        {
          kind: 'books#volume',
          id: 'HN1dzQEACAAJ',
        }],
    };
   mockLocalstorageJest();
   const answer = catchSelectedBook('HN1dzQEACAAJ');
    expect(answer.id).toBe('HN1dzQEACAAJ');
  });
});
函数mockLocalstorageJest向本地存储器发送一个对象,以便在测试函数catchSelectedBook时获取该对象 我像这样导出我的函数:

module.exports = {
  catchSelectedBook,mockLocalstorageJest,
};
const { catchSelectedBook, mockLocalstorageJest} = require('./book-details.js');
我将函数导入测试文件,如下所示:

module.exports = {
  catchSelectedBook,mockLocalstorageJest,
};
const { catchSelectedBook, mockLocalstorageJest} = require('./book-details.js');
无论何时运行测试,我都会收到以下错误消息:

这是否意味着Jest没有定义数组方法“filter”


谢谢

我认为该指令返回null

const objectSearchAsString = localStorage.getItem('objecttransfer');
JSON.parse(null)
返回null,因此
bookObject
也为null


我相信您的问题在于您没有在
mockLocalstorageJest()

中正确设置本地存储。这意味着
localStorage.getItem('objecttransfer')
不存在,因此它返回
null
。您完全正确。该函数向本地存储器发送的是一个对象,而不是catchSelectedBook使用的数组。谢谢不用担心@Pablo,欢迎来到Stack Overflow。请注意,在这里说“谢谢”的首选方式是投票表决好的问题和有用的答案(一旦你有足够的声誉这么做),并通过点击复选标记(这也会给你的声誉带来一点提升)来回答你提出的任何问题。请参阅本页,并