From 30a4810a93ed04b2b0112efd98d8b4ad89a141a8 Mon Sep 17 00:00:00 2001 From: fupeng Date: Sat, 19 Mar 2022 11:32:26 +0800 Subject: [PATCH] fix(memoize): add jest --- .github/workflows/test.yml | 31 +++++++++++++++++++++++++++++++ __tests__/promise.memoize.test.ts | 18 ++++++++++++++++++ src/promise/memoize.ts | 6 +----- 3 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/test.yml create mode 100644 __tests__/promise.memoize.test.ts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..8931491 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,31 @@ +# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created +# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages + +name: test + +on: [push] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + node: ['12', '14', '16'] + name: ${{ matrix.os }} Use Node.js ${{ matrix.node }} + steps: + - name: Check out Git repository + uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + - name: Setup yarn cache + uses: actions/cache@v2 + with: + path: '**/node_modules' + key: ${{ matrix.os }}-${{ matrix.node }}-modules-${{ hashFiles('**/yarn.lock') }} + - name: Install dependencies + run: yarn + - name: Jest + run: yarn test diff --git a/__tests__/promise.memoize.test.ts b/__tests__/promise.memoize.test.ts new file mode 100644 index 0000000..89d791c --- /dev/null +++ b/__tests__/promise.memoize.test.ts @@ -0,0 +1,18 @@ +import { memoize, delay } from '../src/promise'; + +describe('promise/memoize', () => { + test('cache 1000ms', async () => { + let i = 1; + const fn = memoize( + () => Promise.resolve(++i), + () => 1, + 1000, + ); + for (let i = 0; i < 100; i++) { + expect(await fn()).toBe(2); + } + + await delay(1000); + expect(await fn()).toBe(3); + }); +}); diff --git a/src/promise/memoize.ts b/src/promise/memoize.ts index 0f452a8..6ec21c1 100644 --- a/src/promise/memoize.ts +++ b/src/promise/memoize.ts @@ -27,7 +27,7 @@ function memoize( if (timeoutMs) { memos.forEach((item, k) => { - if (item.expiration > Date.now()) { + if (item.expiration < Date.now()) { memos.delete(k); } }); @@ -37,10 +37,6 @@ function memoize( return memos.get(key)!.value; } - if (queues.has(key)) { - return await queues.get(key)!; - } - const promise = fn(...args); queues.set(key, promise);