recoil
Version:
Recoil - A state management library for React
79 lines (77 loc) • 2.28 kB
Flow
/**
* (c) Facebook, Inc. and its affiliates. Confidential and proprietary.
*
* @emails oncall+recoil
* @flow strict-local
* @format
*/
;
const {
getRecoilTestFn
} = require('../../__test_utils__/Recoil_TestingUtils');
let React, act, atom, selector, renderElements, useRecoilValue, useSetRecoilState, useRecoilRefresher;
const testRecoil = getRecoilTestFn(() => {
React = require('react');
({
act
} = require('ReactTestUtils'));
atom = require('../../recoil_values/Recoil_atom');
selector = require('../../recoil_values/Recoil_selector');
({
renderElements
} = require('../../__test_utils__/Recoil_TestingUtils'));
useRecoilRefresher = require('../Recoil_useRecoilRefresher');
({
useRecoilValue,
useSetRecoilState
} = require('../Recoil_Hooks'));
});
testRecoil('useRerunRecoilValue - no-op for atom', async () => {
const myAtom = atom({
key: 'useRerunRecoilValue/atom',
default: 'default'
});
let refresh;
declare function Component(): any;
const container = renderElements(<Component />);
expect(container.textContent).toBe('default');
act(() => refresh());
expect(container.textContent).toBe('default');
});
testRecoil('useRerunRecoilValue - re-executes selector', async () => {
let i = 0;
const myselector = selector({
key: 'useRerunRecoilValue/selector',
get: () => i++
});
let refresh;
declare function Component(): any;
const container = renderElements(<Component />);
expect(container.textContent).toBe('0');
act(() => refresh());
expect(container.textContent).toBe('1');
});
testRecoil('useRerunRecoilValue - clears entire cache', async () => {
const myatom = atom({
key: 'useRerunRecoilValue/myatom',
default: 'a'
});
let i = 0;
const myselector = selector({
key: 'useRerunRecoilValue/selector',
get: ({
get
}) => [get(myatom), i++]
});
let setMyAtom;
let refresh;
declare function Component(): any;
const container = renderElements(<Component />);
expect(container.textContent).toBe('a-0');
act(() => setMyAtom('b'));
expect(container.textContent).toBe('b-1');
act(() => refresh());
expect(container.textContent).toBe('b-2');
act(() => setMyAtom('a'));
expect(container.textContent).toBe('a-3');
});