web3.js has the ability to
call a transaction and get return data without sending a transaction:
web3.eth.call(callObject [, defaultBlock] [, callback])
ethersjs apparently does not have this ability. These docs state:
These methods cannot return their result to the caller.
Using etherjs, how can I get the return data of a transaction without making the actual transaction?