I have the following static function within my ES6 User class which searches for a user given a string.
    // Search for a user by their pNick, includes partial matching
        static getBypNick(pNick = '') {
            // Define our search criteria regex and normalise to lower case
            const userSearchRegex = new RegExp(`^${pNick.toLowerCase()}`, 'i')
            return new Promise((resolve, reject) => {
                // Search user collection for pNick using regex like search and return array of results
                userTable.find({
                    _pNick: userSearchRegex
                }).sort({
                    _pNick: 1
                }).exec(function (err, result) {
                    // If error reject
                    if (err) {
                        return reject(err)
                    }
                    const userArray = result.map((user) => {
                        return new User(
                            user._pNick,
                            user._firstName,
                            user._userName,
                            user._phoneNumber,
                            user._userID)
                    })
                    // Return user records if found
                    return resolve(userArray)
                })
            })
        }
Whilst I can easily test the success routes using Jest I'm struggling to understand how I can invoke the error cases, especially around the .exec method within the function to invoke my reject routes in the promise.
I understand that I can use various Jest features such as mocks and forcing implementation/return value but I just can't figure it all out and the best case in this scenario. The database being used behind the scenes is NeDB, I'm pretty positive I just need to force the .exec portion to return an error and then I should be catching this in my promise.
I have no intention of testing the underlying NeDB library as it has its own tests which execute successfully so this is really all about my own methods.
 


 
    
Top comments (0)