# 检查适配器

> 在用户放心把作品交给它之前，先测试存储适配器。verifyStorageAdapter 会检查保存冲突、修订号、覆盖和版本。

Source: https://fabricjs-document-engine.jscrate.dev/zh/docs/storage/verify-adapter
Last updated: 2026-09-28

一个存储适配器只要有一条规则写错，就可能悄悄丢掉用户的内容。测试存储适配器最快的方法是 `verifyStorageAdapter`。它会用存储约定逐项检查你的适配器，并报告每一项的结果。

## 运行检查

```ts
import { verifyStorageAdapter } from "fabricjs-document-engine/storage";

const report = await verifyStorageAdapter(restStorage);
if (!report.ok) console.table(report.checks);
```

`report` 是 `{ ok, checks }`。每一项检查是 `{ name, passed, message }`。

## 检查哪些内容

| 检查                                        | 为什么重要                     |
| ------------------------------------------- | ------------------------------ |
| `expectedRevision` 为 0 时能保存新文档      | 新文档能被存下来               |
| 能加载自己保存的文档                        | 存进去什么，取出来就是什么     |
| 基于旧修订号的保存会以 `SAVE_CONFLICT` 拒绝 | 另一个标签页不能覆盖更新的内容 |
| 基于当前修订号的保存会被接受                | 正常保存仍然可用               |
| `expectedRevision` 为 `null` 时会覆盖       | 保存冲突后「保留我的版本」能用 |
| 加载不存在的文档会被拒绝                    | 缺失的文档会明确报错           |
| 能保存、列出、加载和删除版本                | 仅当适配器实现了版本方法时检查 |

检查会用随机 id 写入测试文档。如果你的适配器有 `deleteDocument` 方法，检查结束后会把它们删掉。

## 在哪里运行

在开发环境里对着测试数据库跑一次，或者放进你的测试套件：

```ts
import { expect, test } from "vitest";
import { verifyStorageAdapter } from "fabricjs-document-engine/storage";

test("the REST adapter follows the save rules", async () => {
  const report = await verifyStorageAdapter(restStorage);
  expect(report.checks.filter((check) => !check.passed)).toEqual([]);
});
```

不要对着生产数据运行。每次改动都这样测试存储适配器，修订号检查一旦写坏，失败的是构建，而不是用户的保存。
