You're allowed to have multiple scratch org definition files in your project, and you're allowed to run your unit tests in more than one scratch org in parallel. This makes it easy to test your code in various different environments without performing messy, expensive, or side-effect-heavy configuration operations in a "dirty" environment - you always start fresh.
For your use case, I would suggest creating two definitions - say scratch-def-mc.json
and scratch-def-no-mc.json
, one defining a multicurrency org and the other not.
Then, you can create two scratch orgs:
sfdx force:org:create -f config/scratch-def-mc.json -a mc
sfdx force:org:create -f config/scratch-def-no-mc.json -a no-mc
Push your source to both orgs, run your tests in both orgs, and then delete both orgs.
I have an example showing how to run parallel SFDX builds on different scratch org definitions, using CircleCI, available on my GitHub.