expect(isReadonly(rr.foo)).toBe(true)
})
- test('attemptingt to write to a readonly ref nested in a reactive object should fail', () => {
+ test('attemptingt to write plain value to a readonly ref nested in a reactive object should fail', () => {
const r = ref(false)
const ror = readonly(r)
const obj = reactive({ ror })
expect(obj.ror).toBe(false)
})
+ test('replacing a readonly ref nested in a reactive object with a new ref', () => {
+ const r = ref(false)
+ const ror = readonly(r)
+ const obj = reactive({ ror })
+ try {
+ obj.ror = ref(true) as unknown as boolean
+ } catch (e) {}
+
+ expect(obj.ror).toBe(true)
+ expect(toRaw(obj).ror).not.toBe(ror) // ref successfully replaced
+ })
})
receiver: object
): boolean {
let oldValue = (target as any)[key]
- if (isReadonly(oldValue) && isRef(oldValue)) {
+ if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {
return false
}
if (!shallow && !isReadonly(value)) {