使用 Prisma2 和 Jest 删除表中的所有项目

Jér*_*lle 3 node.js graphql prisma prisma-graphql prisma2

我想知道如何使用 Prisma2 和 Jest 删除表中的所有项目?

我阅读了CRUD 文档并尝试这样做:

用户.test.js

....
import { PrismaClient } from "@prisma/client"

beforeEach(async () => {
    const prisma = new PrismaClient()
    await prisma.user.deleteMany({})
})
...
Run Code Online (Sandbox Code Playgroud)

但我有一个错误:

Invalid `prisma.user.deleteMany()` invocation:
The change you are trying to make would violate the required relation 'PostToUser' between the `Post` and `User` models.
Run Code Online (Sandbox Code Playgroud)

我的数据库

CREATE TABLE User (
  id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
  name VARCHAR(255),
  email VARCHAR(255) UNIQUE NOT NULL,
  password VARCHAR(255) NOT NULL
);

CREATE TABLE Post (
  id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
  title VARCHAR(255) NOT NULL,
  createdAt TIMESTAMP NOT NULL DEFAULT now(),
  content TEXT,
  published BOOLEAN NOT NULL DEFAULT false,
  fk_user_id INTEGER NOT NULL,
  CONSTRAINT `fk_user_id` FOREIGN KEY (fk_user_id) REFERENCES User(id) ON DELETE CASCADE
);
Run Code Online (Sandbox Code Playgroud)

模式棱镜

model Post {
  content    String?
  createdAt  DateTime @default(now())
  fk_user_id Int
  id         Int      @default(autoincrement()) @id
  published  Boolean  @default(false)
  title      String
  author     User     @relation(fields: [fk_user_id], references: [id])

  @@index([fk_user_id], name: "fk_user_id")
}

model User {
  email    String   @unique
  id       Int      @default(autoincrement()) @id
  name     String?
  password String   @default("")
  Post     Post[]
  Profile  Profile?
}
Run Code Online (Sandbox Code Playgroud)

mou*_*090 5

Post您违反了和之间的外键约束UserUser在删除 a 之前,您无法删除它Posts

beforeEach(async () => {
    const prisma = new PrismaClient()
    await prisma.post.deleteMany({where: {...}}) //delete posts first
    await prisma.user.deleteMany({})
})
Run Code Online (Sandbox Code Playgroud)

或者在外键上设置级联删除,这样当您删除用户时,其帖子将被自动删除