[Context.update] "{field}": поле не может быть null
- при попытке установить null для required поля
describe("не позволяет устанавливать null для required полей", () => {
const { context, update } = new Context((types) => ({
name: types.string.required("Гость"),
age: types.number.required(18),
isActive: types.boolean.required(true),
tags: types.array.required([]),
role: types.enum("user", "admin").required("user"),
}))
it("null для required string", () => {
// @ts-expect-error - TypeScript запрещает null
expect(() => update({ name: null })).toThrow('[Context.update] "name": поле не может быть null')
expect(context.name, "Поле name осталось 'Гость'").toBe("Гость")
})
it("null для required number", () => {
// @ts-expect-error - TypeScript запрещает null
expect(() => update({ age: null })).toThrow('[Context.update] "age": поле не может быть null')
expect(context.age, "Поле age осталось 18").toBe(18)
})
it("null для required boolean", () => {
// @ts-expect-error - TypeScript запрещает null
expect(() => update({ isActive: null })).toThrow('[Context.update] "isActive": поле не может быть null')
expect(context.isActive, "Поле isActive осталось true").toBe(true)
})
it("null для required array", () => {
// @ts-expect-error - TypeScript запрещает null
expect(() => update({ tags: null })).toThrow('[Context.update] "tags": поле не может быть null')
expect(context.tags, "Поле tags осталось []").toEqual([])
})
it("null для required enum", () => {
// @ts-expect-error - TypeScript запрещает null
expect(() => update({ role: null })).toThrow('[Context.update] "role": поле не может быть null')
expect(context.role, "Поле role осталось 'user'").toBe("user")
})
})
[Context.update] "{field}": ожидается плоский массив примитивов
- при попытке установить nested массив или массив с объектами
describe("валидация массивов", () => {
const { context, update } = new Context((types) => ({
tags: types.array.required([]),
items: types.array.optional([]),
}))
it("nested массив", () => {
// @ts-expect-error - TypeScript запрещает nested массив
expect(() => update({ tags: [["nested"]] })).toThrow(
'[Context.update] "tags": ожидается плоский массив примитивов'
)
expect(context.tags, "Поле tags осталось []").toEqual([])
})
it("массив с объектами", () => {
// @ts-expect-error - TypeScript запрещает массив с объектами
expect(() => update({ tags: [{ x: 1 }] })).toThrow('[Context.update] "tags": ожидается плоский массив примитивов')
expect(context.tags, "Поле tags осталось []").toEqual([])
})
it("массив с функциями", () => {
// @ts-expect-error - TypeScript запрещает массив с функциями
expect(() => update({ tags: [function () {}] })).toThrow(
'[Context.update] "tags": ожидается плоский массив примитивов'
)
expect(context.tags, "Поле tags осталось []").toEqual([])
})
})
[Context.update] "{field}": объекты и функции запрещены
- при попытке установить объект или функцию в примитивное поле
describe("валидация примитивных полей", () => {
const { context, update } = new Context((types) => ({
name: types.string.required("test"),
age: types.number.required(18),
active: types.boolean.required(true),
}))
it("объект в string поле", () => {
// @ts-expect-error - TypeScript запрещает объект в string поле
expect(() => update({ name: { x: 1 } })).toThrow('[Context.update] "name": объекты и функции запрещены')
expect(context.name, "Поле name осталось 'test'").toBe("test")
})
it("функция в number поле", () => {
// @ts-expect-error - TypeScript запрещает функции в number поле
expect(() => update({ age: function () {} })).toThrow('[Context.update] "age": объекты и функции запрещены')
expect(context.age, "Поле age осталось 18").toBe(18)
})
it("массив в boolean поле", () => {
// @ts-expect-error - TypeScript запрещает массив в boolean поле
expect(() => update({ active: [true] })).toThrow('[Context.update] "active": объекты и функции запрещены')
expect(context.active, "Поле active осталось true").toBe(true)
})
})
[Context.update] "{field}": должно быть '{values}', получено '{value}'
- при попытке установить недопустимое значение для enum поля
describe("валидация enum полей", () => {
const { context, update } = new Context((types) => ({
role: types.enum("user", "admin").required("user"),
status: types.enum("active", "inactive").optional("active"),
}))
it("недопустимое значение в required enum", () => {
// @ts-expect-error - TypeScript запрещает значения, не входящие в enum
expect(() => update({ role: "guest" })).toThrow(
"[Context.update] \"role\": должно быть 'user' или 'admin', получено 'guest'"
)
expect(context.role, "Поле role осталось 'user'").toBe("user")
})
it("недопустимое значение в optional enum", () => {
// @ts-expect-error - TypeScript запрещает значения, не входящие в enum
expect(() => update({ status: "pending" })).toThrow(
"[Context.update] \"status\": должно быть 'active' или 'inactive', получено 'pending'"
)
expect(context.status, "Поле status осталось 'active'").toBe("active")
})
})
Обновляет значения в контексте
Обновляет только существующие ключи. Игнорирует undefined.
Для optional полей поддерживается установка null