There are 3 ways of configuring mutant:
- In the source code via processing comments.
- Via the CLI
- Via a config file.
Mutant currently only supports the mutant:disable
directive that can be added in a
source code comment to ignore a specific subject.
Example:
class SomeClass
# mutant:disable
def some_method
end
end
More inline configuration will be made available over time.
Mutant can be configured with a config file that can be named one of the following: .mutant.yml
, config/mutant.yml
, or mutant.yml
The following options can be configured through the config file:
The includes key takes a list of strings to add to ruby's $LOAD_PATH
. This is similar to ruby's -I
option.
---
includes:
- lib
Additional includes can be added by providing the -I
or --include
option to the CLI.
The requires key takes a list of ruby files to be required. This is how mutant loads your application code.
---
requires:
- my_app
Additional requires can be added by providing the -r
or --require
option to the CLI.
Allows to set environment variables that are loaded just before the target application is
loaded. This is especially useful when dealing with rails that has to be initialized with
RAILS_ENV=test
to behave correctly under mutation testing.
---
environment_variables:
RAILS_ENV: test
Additional environment variables can be added by providing the --env KEY=VALUE
option to the CLI.
Specifies which mutant integration to use. If your tests are written in RSpec, this should be set to rspec
. If your tests are written in minitest, this should be set to minitest
.
---
integration: rspec
The integration can be overridden by providing the --use
option to the CLI.
When fail_fast
is enabled, mutant will stop as soon as it encounters an alive mutation. This can be helpful for incremental workflows where you want to see the output of a failed mutation immediately. Valid values are true
and false
.
---
fail_fast: true
Allows to set subject matchers in the configration file.
matcher:
# Subject expressions to find subjects for mutation testing.
# Multiple entries are allowed and matches from each expression
# are unioned.
#
# Subject expressions can also be specified on the command line. Example:
# `bundle exec mutant run YourSubject`
#
# Note that expressions from the command line replace the subjects
# configured in the config file!
subjects:
- Your::App::Namespace # select all subjects on a specific constant
- Your::App::Namespace* # select all subjects on a specific constant, recursively
- Your::App::Namespace#some_method # select a specific instance method
- Your::App::Namespace.some_method # select a specific class method
- descendants:ApplicationController # select all descendands of application controller (and itself)
# Expressions of subjects to ignore during mutation testing.
# Multiple entries are allowed and matches from each expression
# are unioned.
#
# Subject ignores can also be specified on the command line, via `--ignore-subject`. Example:
# `bundle exec mutant run --ignore-subject YourSubject#some_method`
#
# Note that subject ignores from the command line are added to the subject ignores
# configured on the command line!
#
# Also matcher ignores generally shold be used for entire namespaces, and individual
# methods be disabled directly in source code via `mutant:disable` directives.
ignore:
- Your::App::Namespace::Dirty # ignore all subjects on a specific constant
- Your::App::Namespace::Dirty* # ignore all subjects on a specific constant, recursively
- Your::App::Namespace::Dirty#some_method # ignore a specific instance method
- Your::App::Namespace::Dirty#some_method # ignore a specific class method
If you specify match expressions on the command line they overwrite all expressions in the config file.
Also note that a subject can only be matched once. So Foo*
and Foo::Bar*
expressions
would not match duplicate subjects.
Specify how many processes mutant uses to kill mutations. Defaults to the number of processors on your system.
---
jobs: 8
The number of jobs can be overridden by the -j
or --jobs
option in the CLI.
See mutant's configuration file, mutant.yml, for a complete example.
Configuration of the mutations to generate.
mutation:
# Control the maximum time per mutation spend on analysis.
# Unit is in fractional seconds.
#
# Default absent.
#
# Absent value: No limit on per mutation analysis time.
# Present value: Limit per mutation analysis time to specified value in seconds.
timeout: 1.0
# Add ignore AST patterns that skip mutation generation
# This is useful to not emit mutations for log statements etc
ignore_patterns:
- send{selector=log}
Please consult the AST-Pattern documentation for details of AST pattern matching.
The toplevel key mutation_timeout
is a deprecated alias for the timeout
key under mutation
.
Use timeout
setting under coverage_criteria
in the config file to control
if timeouts are allowed to cover mutations.
A configuration file only setting to control which criteria apply to determine mutation coverage.
---
coverage_criteria:
# Control the timeout criteria, defaults to `false`:
# * `true` - mutant will consider timeouts as covering mutations.
# * `false` mutant will ignore timeouts when determining mutation coverage.
timeout: false
# Control the process status abort criteria, defaults to `false`:
# * `true` - mutant will consider unexpected process aborts (example segfaults)
# as covering the mutation that caused this behavior. This includes bugs in the test
# framework not producing a test result. Use with care.
# * `false` - mutant will ignore unexpected process aborts when determining coverage.
process_abort: false
# Control the test result criteria, # defaults to `true`
# * `true` mutant will consider failing tests covering mutations.
# * `false` mutant will ignore test results when determining mutation coverage.
# Hint: You probably do not want to touch the default.
test_result: true
At this point there is no CLI equivalent for these settings.