Skip to content

Commit fa34bdd

Browse files
feat: add provideMockWithValues (#238)
1 parent f6d559d commit fa34bdd

File tree

3 files changed

+39
-11
lines changed

3 files changed

+39
-11
lines changed

Diff for: package.json

+10-10
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@
4646
"core-js": "^3.6.5",
4747
"rxjs": "^6.5.5",
4848
"tslib": "^2.0.0",
49-
"zone.js": "~0.11.4"
49+
"zone.js": "^0.11.4"
5050
},
5151
"devDependencies": {
5252
"@angular-devkit/build-angular": "12.1.0",
53-
"@angular-eslint/eslint-plugin": "~12.2.0",
54-
"@angular-eslint/eslint-plugin-template": "~12.2.0",
55-
"@angular-eslint/template-parser": "~12.2.0",
53+
"@angular-eslint/eslint-plugin": "^12.2.0",
54+
"@angular-eslint/eslint-plugin-template": "^12.2.0",
55+
"@angular-eslint/template-parser": "^12.2.0",
5656
"@angular/cli": "12.1.0",
5757
"@angular/compiler-cli": "12.1.1",
5858
"@angular/language-service": "12.1.1",
@@ -65,7 +65,7 @@
6565
"@nrwl/workspace": "12.5.1",
6666
"@testing-library/jasmine-dom": "^1.2.0",
6767
"@testing-library/jest-dom": "^5.11.10",
68-
"@types/jasmine": "~3.5.0",
68+
"@types/jasmine": "^3.5.0",
6969
"@types/jest": "^26.0.23",
7070
"@types/node": "14.14.37",
7171
"@typescript-eslint/eslint-plugin": "4.28.2",
@@ -79,13 +79,13 @@
7979
"eslint-plugin-jest-dom": "3.9.0",
8080
"eslint-plugin-testing-library": "4.9.0",
8181
"husky": "^6.0.0",
82-
"jasmine-core": "~3.7.0",
83-
"jasmine-spec-reporter": "~5.0.0",
82+
"jasmine-core": "^3.7.0",
83+
"jasmine-spec-reporter": "^5.0.0",
8484
"jest": "^27.0.6",
8585
"jest-preset-angular": "9.0.4",
86-
"karma": "~6.3.4",
87-
"karma-chrome-launcher": "~3.1.0",
88-
"karma-jasmine": "~4.0.0",
86+
"karma": "^6.3.4",
87+
"karma-chrome-launcher": "^3.1.0",
88+
"karma-jasmine": "^4.0.0",
8989
"karma-jasmine-html-reporter": "^1.5.0",
9090
"lint-staged": "^10.2.11",
9191
"ng-packagr": "12.0.0",

Diff for: projects/jest-utils/src/lib/create-mock.ts

+7
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,10 @@ export function provideMock<T>(type: Type<T>): Provider {
4545
useValue: createMock(type),
4646
};
4747
}
48+
49+
export function provideMockWithValues<T, K extends keyof T>(type: Type<T>, values: Partial<Record<K, T[K]>>): Provider {
50+
return {
51+
provide: type,
52+
useValue: createMockWithValues(type, values),
53+
};
54+
}

Diff for: projects/jest-utils/tests/create-mock.spec.ts

+22-1
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@ import { Component } from '@angular/core';
22
import { TestBed } from '@angular/core/testing';
33
import { fireEvent, render, screen } from '@testing-library/angular';
44

5-
import { createMock, provideMock, Mock } from '../src/public_api';
5+
import { createMock, provideMock, provideMockWithValues, Mock } from '../src/public_api';
66

77
class FixtureService {
88
constructor(private foo: string, public bar: string) {}
99

1010
print() {
1111
console.log(this.foo, this.bar);
1212
}
13+
14+
concat() {
15+
return this.foo + this.bar;
16+
}
1317
}
1418

1519
@Component({
@@ -39,6 +43,23 @@ test('provides a mock service', async () => {
3943
expect(service.print).toHaveBeenCalledTimes(1);
4044
});
4145

46+
test('provides a mock service with values', async () => {
47+
await render(FixtureComponent, {
48+
providers: [provideMockWithValues(FixtureService, {
49+
bar: 'value',
50+
concat: jest.fn(() => 'a concatenated value')
51+
})],
52+
});
53+
54+
const service = TestBed.inject(FixtureService);
55+
56+
fireEvent.click(screen.getByText('Print'));
57+
58+
expect(service.bar).toEqual('value');
59+
expect(service.concat()).toEqual('a concatenated value');
60+
expect(service.print).toHaveBeenCalled();
61+
});
62+
4263
test('is possible to write a mock implementation', async () => {
4364
await render(FixtureComponent, {
4465
providers: [provideMock(FixtureService)],

0 commit comments

Comments
 (0)