Skip to content

Commit b4e8abe

Browse files
committed
add tests
1 parent b310292 commit b4e8abe

File tree

4 files changed

+17
-6
lines changed

4 files changed

+17
-6
lines changed

modules/50-objects/35-mapping-modifiers/description.ru.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ theory: |
4646
instructions: |
4747
4848
Реализуйте функцию `deepFreeze()`, которая принимает на вход объект и делает его самого, его поля и все вложенные объекты неизменяемыми и возвращает этот объект.
49+
Предполагается что поля объекта и поля вложенных объектов не содержат массивы, только простые типы данных и объекты.
4950
5051
```typescript
5152
const user = deepFreeze({

modules/50-objects/35-mapping-modifiers/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ type DeepReadonly<T> = {
44
};
55

66
const deepFreeze = <T extends object>(obj: T): DeepReadonly<T> => {
7-
Object.freeze(obj);
7+
const freezedObj = Object.freeze(obj);
88

9-
Object.values(obj).forEach((value) => {
9+
Object.values(freezedObj).forEach((value) => {
1010
if (typeof value === 'object' && value !== null) {
1111
deepFreeze(value);
1212
}
1313
});
1414

15-
return obj;
15+
return freezedObj;
1616
};
1717
// END
1818

modules/50-objects/35-mapping-modifiers/ru/EXERCISE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
21
Реализуйте функцию `deepFreeze()`, которая принимает на вход объект и делает его самого, его поля и все вложенные объекты неизменяемыми и возвращает этот объект.
2+
Предполагается что поля объекта и поля вложенных объектов не содержат массивы, только простые типы данных и объекты.
33

44
```typescript
55
const user = deepFreeze({

modules/50-objects/35-mapping-modifiers/test.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ test('deepFreeze', () => {
1515
},
1616
};
1717

18-
expect(deepFreeze(obj)).toEqual({
18+
const user = deepFreeze(obj);
19+
20+
expect(user).toEqual({
1921
name: 'John',
2022
age: 30,
2123
location: {
@@ -27,7 +29,15 @@ test('deepFreeze', () => {
2729
},
2830
});
2931

30-
const user = deepFreeze(obj);
32+
expect(() => {
33+
// @ts-expect-error Cannot assign read-only property.
34+
user.age = 20;
35+
}).toThrow();
36+
37+
expect(() => {
38+
// @ts-expect-error Cannot assign nested read-only property.
39+
user.location.city = 'London';
40+
}).toThrow();
3141

3242
ta.assert<ta.Equal<typeof user, Readonly<{
3343
name: string,

0 commit comments

Comments
 (0)