Skip to content
This repository has been archived by the owner on Aug 16, 2022. It is now read-only.

Effector's tests

Victor edited this page Jan 17, 2020 · 1 revision

ReEffect is designed to be as compatible with usual Effects as possible.

It passes almost all internal Effector's tests, except type tests and one rfc1 test, due to nature of ReEffect.

You can run Effector's tests against ReEffect by doing following:

1 Checkout effector's source code

git clone git@github.com:zerobias/effector.git
cd effector

2 Install ReEffect

yarn
yarn add effector-reeffect

3 Change Flow settings to allow ReEffect package

diff --git a/.flowconfig b/.flowconfig
index 0383d01e..8f83e504 100644
--- a/.flowconfig
+++ b/.flowconfig
@@ -86,6 +86,7 @@ unnecessary-invariant
 !.*/node_modules/serve
 !.*/node_modules/@goodmind/flow-js
 !.*/node_modules/table
+!.*/node_modules/effector-reeffect

 <PROJECT_ROOT>/src/types/*
 <PROJECT_ROOT>/website/try/evaluator/flow/*

4 Replace createEffect in tests with createReEffect

diff --git a/src/effector/__tests__/combine.test.js b/src/effector/__tests__/combine.test.js
index 51f8b9e5..10b468a8 100644
--- a/src/effector/__tests__/combine.test.js
+++ b/src/effector/__tests__/combine.test.js
@@ -1,6 +1,7 @@
 //@flow
 
-import {combine, createStore, createEffect, sample} from 'effector'
+import {createReEffect as createEffect} from 'effector-reeffect'
+import {combine, createStore, sample} from 'effector'
 import {argumentHistory} from 'effector/fixtures'
 
 function rgbToHex(r, g, b) {
diff --git a/src/effector/__tests__/domain.test.js b/src/effector/__tests__/domain.test.js
index 895b1396..96606817 100644
--- a/src/effector/__tests__/domain.test.js
+++ b/src/effector/__tests__/domain.test.js
@@ -1,11 +1,11 @@
 //@flow
 
+import {createReEffect as createEffect} from 'effector-reeffect'
 import {
   createDomain,
   clearNode,
   createStore,
   createEvent,
-  createEffect,
   createApi,
   restore,
 } from 'effector'
diff --git a/src/effector/__tests__/effect/di.test.js b/src/effector/__tests__/effect/di.test.js
index 0f09f77a..d0130493 100644
--- a/src/effector/__tests__/effect/di.test.js
+++ b/src/effector/__tests__/effect/di.test.js
@@ -1,6 +1,6 @@
 //@flow
 
-import {createEffect} from 'effector'
+import {createReEffect as createEffect} from 'effector-reeffect'
 import {delay} from 'effector/fixtures'
 
 test('effect.create single argument', async() => {
diff --git a/src/effector/__tests__/effect/index.test.js b/src/effector/__tests__/effect/index.test.js
index ab609eca..bcc6daeb 100644
--- a/src/effector/__tests__/effect/index.test.js
+++ b/src/effector/__tests__/effect/index.test.js
@@ -1,6 +1,6 @@
 //@flow
+import {createReEffect as createEffect} from 'effector-reeffect'
 import {
-  createEffect,
   createEvent,
   createStore,
   createStoreObject,
diff --git a/src/effector/__tests__/effect/name.test.js b/src/effector/__tests__/effect/name.test.js
index a20ce033..fca94e54 100644
--- a/src/effector/__tests__/effect/name.test.js
+++ b/src/effector/__tests__/effect/name.test.js
@@ -1,6 +1,7 @@
 //@flow
 
-import {createEffect, createDomain} from 'effector'
+import {createReEffect as createEffect} from 'effector-reeffect'
+import {createDomain} from 'effector'
 
 test("should return it's own name on effect.getType()", () => {
   expect(createEffect('foo').getType()).toBe('foo')
diff --git a/src/effector/__tests__/guard.test.js b/src/effector/__tests__/guard.test.js
index ba0de115..de993765 100644
--- a/src/effector/__tests__/guard.test.js
+++ b/src/effector/__tests__/guard.test.js
@@ -1,12 +1,12 @@
 //@flow
 
+import {createReEffect as createEffect} from 'effector-reeffect'
 import {
   guard,
   createEvent,
   createStore,
   createApi,
   is,
-  createEffect,
   sample,
 } from 'effector'
 import {argumentHistory, spy} from 'effector/fixtures'
diff --git a/src/effector/__tests__/restore.test.js b/src/effector/__tests__/restore.test.js
index 3a4a98fd..f1a861b8 100644
--- a/src/effector/__tests__/restore.test.js
+++ b/src/effector/__tests__/restore.test.js
@@ -1,12 +1,12 @@
 //@flow
 
+import {createReEffect as createEffect} from 'effector-reeffect'
 import {
   restore,
   restoreEvent,
   restoreEffect,
   restoreObject,
   createEvent,
-  createEffect,
   type Effect,
 } from 'effector'
 import {spy} from 'effector/fixtures'
diff --git a/src/effector/__tests__/rfc1.test.js b/src/effector/__tests__/rfc1.test.js
index 80dc9efb..a0f51fa0 100644
--- a/src/effector/__tests__/rfc1.test.js
+++ b/src/effector/__tests__/rfc1.test.js
@@ -2,12 +2,12 @@
 import * as React from 'react'
 import {from} from 'most'
 
+import {createReEffect as createEffect} from 'effector-reeffect'
 import {
   createStore,
   createStoreObject,
   createEvent,
   type Event,
-  createEffect,
 } from 'effector'
 import {useStore} from 'effector-react'
 
@@ -269,7 +269,8 @@ test('rfc1 example implementation', async() => {
     await new Promise(_ => setTimeout(_, 2200))
   })
   expect(counter.getState()).toBe(2)
-  expect(fnWait).toHaveBeenCalledTimes(2)
+  // due to nature of ReEffect, out of two parallel effects only single one will trigger .done
+  expect(fnWait).toHaveBeenCalledTimes(1)
   expect(fnClick).toHaveBeenCalledTimes(2)
   expect(store.getState()).toMatchObject({
     counter: 2,
diff --git a/src/effector/__tests__/sample/sample.test.js b/src/effector/__tests__/sample/sample.test.js
index e4ea6396..ec06519c 100644
--- a/src/effector/__tests__/sample/sample.test.js
+++ b/src/effector/__tests__/sample/sample.test.js
@@ -1,12 +1,12 @@
 //@flow
 
+import {createReEffect as createEffect} from 'effector-reeffect'
 import {
   sample,
   guard,
   Kind,
   createEvent,
   createStore,
-  createEffect,
 } from 'effector'
 
 import {spy, getSpyCalls, argumentHistory} from 'effector/fixtures'
diff --git a/src/effector/__tests__/store/index.test.js b/src/effector/__tests__/store/index.test.js
index e2c4df0f..1e501584 100644
--- a/src/effector/__tests__/store/index.test.js
+++ b/src/effector/__tests__/store/index.test.js
@@ -1,6 +1,7 @@
 //@flow
 
-import {createStore, createEvent, createEffect} from 'effector'
+import {createReEffect as createEffect} from 'effector-reeffect'
+import {createStore, createEvent} from 'effector'
 import {spy, getSpyCalls, argumentHistory} from 'effector/fixtures'
 
 test('createStore', () => {
diff --git a/src/forms/__tests__/forms.test.js b/src/forms/__tests__/forms.test.js
index edb2bb36..2402b975 100644
--- a/src/forms/__tests__/forms.test.js
+++ b/src/forms/__tests__/forms.test.js
@@ -1,7 +1,8 @@
 //@flow
 
 import faker from 'faker'
-import {type Effect, createEffect, createEvent, restoreEvent} from 'effector'
+import {createReEffect as createEffect} from 'effector-reeffect'
+import {type Effect, createEvent, restoreEvent} from 'effector'
 import {createFormApi} from '../'
 
 describe('createFormApi', () => {
diff --git a/src/react/__tests__/rerendering.test.js b/src/react/__tests__/rerendering.test.js
index a4562929..972aa482 100644
--- a/src/react/__tests__/rerendering.test.js
+++ b/src/react/__tests__/rerendering.test.js
@@ -3,10 +3,10 @@
 import * as React from 'react'
 import {render, container, act} from 'effector/fixtures/react'
 
+import {createReEffect as createEffect} from 'effector-reeffect'
 import {
   createStore,
   createEvent,
-  createEffect,
   createStoreObject,
   merge,
 } from 'effector'
diff --git a/src/react/__tests__/useStore.test.js b/src/react/__tests__/useStore.test.js
index 7b7d0459..15d60c63 100644
--- a/src/react/__tests__/useStore.test.js
+++ b/src/react/__tests__/useStore.test.js
@@ -2,7 +2,8 @@
 
 import * as React from 'react'
 import {render, container, act} from 'effector/fixtures/react'
-import {createStore, createEvent, createEffect, createDomain} from 'effector'
+import {createReEffect as createEffect} from 'effector-reeffect'
+import {createStore, createEvent, createDomain} from 'effector'
 import {useStore, useStoreMap} from '../useStore'
 import {argumentHistory} from 'effector/fixtures'

5 Run tests

yarn test

After some time you should see, that all tests are passed 🎉

Test Suites: 67 passed, 67 total
Tests:       1 skipped, 499 passed, 500 total
Snapshots:   353 passed, 353 total
Time:        20.248s
Ran all test suites in 7 projects.