avajs/ava

Do you want to work on this issue?

You can request for a bounty in order to promote it!


2 active bounty requests

$60.00$40.00
Solve someone else's bounty request by clicking on it and completing the funding to earn additional credits

feature request: cli option of config file `--config-file [path]` #1857

iamstarkov posted onGitHub

Prerequisites

  • issue isn't reported

Description

hi 👋,

I'm attempting to build nodejs flavour of react-scripts from create-react-app. But instead of jest I would love to use ava. Unfortunately, there is no way to put config inside the project itself. Currently it gotta be either in package.json or in ava.config.js. It will help a lot if I can point ava to the relevant config.

It's very common feature, i can help to implement it.


Yes we left this as a follow-up. Some things to consider:

  • Should this silently override config from package.json#ava / ava.config.js?
  • Should we allow a package.json#ava.config value so you don't need to provide the argument?
  • And if so, what if package.json#ava contains other properties?
posted by novemberborn over 6 years ago

I need this also!

posted by bichikim over 6 years ago

+1

in my case, as in my comment against #1820, i can't use esm + { mode: "strict" } if 'ava.config.js' doesn't have an .mjs extension (because currently the file must use ESM export syntax)

ava --config ava.config.mjs or some equivalent would be very helpful. until then, i am relegated to using { ava } in package.json

posted by cantremember over 6 years ago

Maybe we will run into a problem which a project root folder has so many xxx.config.js files so I mostly move those things into /config owing to Ava is not supporting ava --config xxx the Ava config remains in a project root folder. it is so sad 😭

my opinion

  • Yes it Should override or ignore all the config silently
  • no because it means I don't want to use package.json#ava.config or projectRoot/ava.config.js
posted by bichikim over 6 years ago

my opinion

Should -c xxx override(disable) all config no because -c means I don't want to use package.json#ava.config

@bichikim could you clarify your answer? It doesn't quite map to my questions, and I don't want to presume anything 😄

posted by novemberborn over 6 years ago

Would also appreciate this. I'd like to make the config file a dotfile. Try to put them all in dotfiles to shunt them out of view.

posted by bookmoons over 6 years ago

Should this silently override config from package.json#ava / ava.config.js?

Seems sensible. If someone explicitly specifies a custom config file, probably not surprising if that becomes the sole config.

Should we allow a package.json#ava.config value so you don't need to provide the argument?

The command line argument would work fine for me. I set up an npm script to run ava, so that's a fine place to put the arg. I do JSDoc that way - one config file, one arg in the script.

Another benefit to this would be easy setup of separate test suites. Just make a config file for each, and an npm script for each. Clean all around.

npm run unit-test npm run integration-test npm run network-test

"scripts": {
    "unit-test": "ava -C .unittest.conf.js",
    "integration-test": "ava -C .integrationtest.conf.js",
    "network-test": "ava -C .networktest.conf.js"
}
posted by bookmoons over 6 years ago

Should this silently override config from package.json#ava / ava.config.js?

Seems sensible. If someone explicitly specifies a custom config file, probably not surprising if that becomes the sole config.

I agree. The implicit question is whether we should print a warning.

Should we allow a package.json#ava.config value so you don't need to provide the argument?

The command line argument would work fine for me. I set up an npm script to run ava, so that's a fine place to put the arg. I do JSDoc that way - one config file, one arg in the script.

I frequently use npx ava. Having to specify the --config argument would be bothersome. So I'm 👍 on a package.json#ava.config option, but in that case I do think we should exit if package.json#ava contains other options.

posted by novemberborn over 6 years ago

@novemberborn like it

posted by iamstarkov over 6 years ago

@issuehunt has funded $60.00 to this issue.


posted by IssueHuntBot almost 6 years ago

I was looking into the code to make the change. The problem is that cli is parsed by meow and the default values (which come from the config file) are passed as parameters to meow. So, if you want meow to parse a --configFile flag it would cause problems, because before having the configFile value meow would need to know the current default value for all other options in cli (which need to come from the config file that we do not know at this point yet).

The only options I can think about are:

  • Change meow to accept this kind of feature (probably not the best approach)
  • Call meow twice, first time to parse the config file, second to parse the rest (this works but is ugly)
  • Do not use meow default values

Something I saw someone else suggesting in another thread is to just use environment variables in ava.config.js to export the config for each scenario. This solution makes more sense to me at this point.

https://github.com/avajs/ava/issues/2152#issuecomment-499810046

posted by dougmaitelli almost 6 years ago

Jus tried that and worked like a charm.

export default () => {
  let files;
  if (process.env.TEST_MODE === "integration") {
    files = ["test/integration/**/*.test.ts"];
  } else {
    files = ["test/unit/**/*.test.ts"];
  }

  return {
    compileEnhancements: false,
    extensions: ["ts"],
    require: ["ts-node/register", "dotenv/config"],
    files: files
  };
};
posted by dougmaitelli almost 6 years ago

We could use a different library to look for the --config argument. Or re-parse the arguments with different defaults, I think that's fine too.

Something I saw someone else suggesting in another thread is to just use environment variables in ava.config.js to export the config for each scenario. This solution makes more sense to me at this point.

Regardless we're still keen on a --config feature.

posted by novemberborn over 5 years ago

Shouldn’t relative paths be allowed? For example:

ava --config ava-configs/typescript.config.js
posted by rauschma over 5 years ago

@rauschma I believe location is forced for now https://github.com/avajs/ava/pull/2166#issuecomment-507039490 Didn't try it yet though.

posted by vladimiry over 5 years ago

@vladimiry Yes it is, I just tried it.

posted by rauschma over 5 years ago

@rauschma it's hard to know how to interpret the various relative glob patterns, Babel options and require paths in a nested configuration file. Rather than come up with a perfect solution I figured we'd at least ship this one.

I've opened https://github.com/avajs/ava/issues/2185 to discuss solutions.

posted by novemberborn over 5 years ago

Fund this Issue

$60.00
Funded
Only logged in users can fund an issue

Pull requests

Recent activities

issuehunt funded 60.00 for avajs/ava# 1857
almost 6 years ago