【发布时间】:2021-01-05 01:20:15
【问题描述】:
我最近尝试为我的基本 CRUD REST API 编写一些单元测试。不幸的是,在这个 API 中,我使用 Github 的 OAuth 进行身份验证,并使用 express-session 来存储会话。如何测试此端点:
export async function createProject(req: Request, res: Response) {
try {
const { name, repository_url, repository_provider, assets_path } = req.body;
const newProject = await Project.create({
owner_id: (req.user as User).id,
name,
repository_url,
repository_provider,
assets_path,
});
const newMember = await ProjectMember.create({
project_id: newProject.id,
member_id: (req.user as User).id,
project_role: "owner",
});
newProject.save();
newMember.save();
res.status(201).json(newProject);
} catch (error) {
res.status(400).json({ error: error.message || "Unexpected error." });
}
}
当我没有设置 req.user 时,我通过登录 GitHub 得到了这个?
这是我现在的测试套件。我将 Jest 用于套件,使用 TypeORM 来操作 MySQL 数据库。
let server: Express;
let connection: Connection;
beforeAll(async () => {
connection = await createConnection();
server = await createServer();
await connection.createQueryBuilder().delete().from(User).execute();
await User.create({
name: "test",
github_name: "test",
}).save();
});
afterAll(async () => {
await connection.dropDatabase();
await connection.close();
});
describe("POST /projects", () => {
it("should return 201 & create project & valid response if not logged in", async (done) => {
request(server)
.post("/api/projects")
.send({
name: "test",
repository_url: "https://github.com/test/test",
repository_provider: "github",
assets_path: "/assets/i18n"
})
.expect("Content-Type", /json/)
.expect(201)
.end((err, res) => {
if (err) return done(err);
done();
});
});
});
【问题讨论】:
标签: node.js typescript jestjs