Skip to content

Commit

Permalink
Add cleanup function
Browse files Browse the repository at this point in the history
  • Loading branch information
betula committed Jun 27, 2019
1 parent 7be98b8 commit 52975dd
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 13 deletions.
21 changes: 15 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ new B(); // "Hello A2!"

## Unit testing

You can use `override` or `assign` for provide mocks in you dependencies.
You can use `assign` for provide mocks into you dependencies.

```typescript
// world.ts
Expand All @@ -212,11 +212,13 @@ export class Hello {
}

// hello.test.ts
import { assign } from "node-provide";
import { assign, cleanup } from "node-provide";
import { World } from "./world";
import { Hello } from "./hello";
// ...

after(cleanup);

it("It works!", () => {
const worldMock = {
hello: jest.fn(),
Expand Down Expand Up @@ -420,17 +422,24 @@ class {

**isolate**

**cleanup**

**reset**

Clean all cached dependency instances and overrides. Its needed for testing. Has no parameters.
Clean all cached dependency instances. Its needed for testing. Has no parameters.

```javascript
// ...
after(reset);
after(cleanup);
// ...
```

**reset**

Clean all cached dependency instances and overrides. Has no parameters.

```javascript
reset()
```

---

If you have questions or something else for me or this project, maybe architectures questions, improvement ideas or anything else, please make issue.
13 changes: 13 additions & 0 deletions index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
assign,
inject,
reset,
cleanup,
getZoneId,
RootZoneId,
zoneIndex,
Expand Down Expand Up @@ -101,6 +102,18 @@ test("Should cache override", () => {
expect(instances[RootZoneId].get(A2)).toBeInstanceOf(A3);
});

test("Should work cleanup", () => {
class A {}
class B {}
const m = {};
expect(resolve(A)).toBeInstanceOf(A);
assign(B, m);
expect(resolve(B)).toBe(m);
expect(instances[RootZoneId].size).toBe(2);
cleanup();
expect(instances[RootZoneId]).toBeUndefined();
});

test("Should work reset", () => {
class A {}
class A2 extends A {}
Expand Down
14 changes: 9 additions & 5 deletions index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -288,21 +288,25 @@ export function assign(...depOrDepInstPairs: any[]) {
}
}

export function reset() {
export function cleanup() {
Object.keys(instances).forEach((id) => {
instances[id].clear();
delete instances[id];
});
Object.keys(overrides).forEach((id) => {
overrides[id].clear();
delete overrides[id];
});
Object.keys(resolvePhases).forEach((id) => {
resolvePhases[id].clear();
delete resolvePhases[id];
});
}

export function reset() {
cleanup();
Object.keys(overrides).forEach((id) => {
overrides[id].clear();
delete overrides[id];
});
}

class Chan {
private signal: () => void;
private next: Promise<void>;
Expand Down
2 changes: 1 addition & 1 deletion jest-cleanup-after-each.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
afterEach(require(".").reset);
afterEach(require(".").cleanup);
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "node-provide",
"version": "0.2.2",
"version": "0.2.3",
"description": "Async context based Dependency Injection for Node.JS",
"repository": {
"url": "https://github.com/betula/node-provide"
Expand Down

0 comments on commit 52975dd

Please sign in to comment.