Im testing some functions with MongoDB and Mongoose. For the tests i'm using Jest and mongo-memory-server. The function createUser(arg1, arg2) should throw a TypeError if there already exists a user with that discord id in the database.
createUser(arg1, arg2)
async function createUser(disc_id, moodleToken) { const profileData = await fetchUser(disc_id); if (profileData) { throw TypeError("The account already exist in the database!"); } const newUser = new profileModel({ discord_id: disc_id, moodle_token: moodleToken, }) await newUser.save(); return { userId: newUser._id }; } fetchUser(disc_id) returns whether a user with the same discord id is found or not.
When testing with Jest i created the following test which passes just fine:
it("Should create a new user", async () => { const discord_id = "3452357445"; const moodle_token = "34ffDSE8439Ujfe8f3jj"; const { userId } = await createUser(discord_id, moodle_token); const user = await profileSchema.findById(userId); expect(user.discord_id).toEqual(discord_id); expect(user.moodle_token).toEqual(moodle_token); }) Now i want to test if the TypeError is thrown when trying to create a new user, with the same discord id, i tried the following without any success:
describe("Error when", () => { it("an existing matches discord id", async () => { const discord_id = "3452357445"; const moodle_token = "34ffDSE8439Ujfe8f3jj"; await createUser(discord_id, moodle_token) await expect(async () => { createUser(discord_id, moodle_token); }).rejects.toThrow(TypeError("The account already exist in the database!")) }) }) When running the tests this is the output from the console:
FAIL test/manageUserDB.test.js Create new user ✓ Should create a new user (66 ms) Error when ✕ an existing matches discord id (3 ms) ● Create new user › Error when › an existing matches discord id TypeError: The account already exist in the database! 11 | 12 | if (profileData) { > 13 | throw TypeError("The account already exist in the database!"); | ^ 14 | } 15 | const newUser = new profileModel({ 16 | discord_id: disc_id, at createUser (BoodleDB/manageUserDB.js:13:15) at Object.<anonymous> (test/manageUserDB.test.js:29:13) Test Suites: 1 failed, 1 total Tests: 1 failed, 1 passed, 2 total Snapshots: 0 total Time: 0.6 s, estimated 1 s Ran all test suites matching /.\/test/i. EDIT
function fetchUser (disc_id) { return profileModel.findOne({ discord_id: disc_id }); }