Record Modes

Betamax, like VCR, has four modes that it can use to record cassettes:

  • 'all'
  • 'new_episodes'
  • 'none'
  • 'once'

You can only ever use one record mode. Below are explanations and examples of each record mode. The explanations are blatantly taken from VCR’s own Record Modes documentation.

All

The 'all' record mode will:

  • Record new interactions.
  • Never replay previously recorded interactions.

This can be temporarily used to force VCR to re-record a cassette (i.e., to ensure the responses are not out of date) or can be used when you simply want to log all HTTP requests.

Given our file, examples/record_modes/all/example.py,

Every time we run it, our cassette (examples/record_modes/all/all-example.json) will be updated with new values.

New Episodes

The 'new_episodes' record mode will:

  • Record new interactions.
  • Replay previously recorded interactions.

It is similar to the 'once' record mode, but will always record new interactions, even if you have an existing recorded one that is similar (but not identical, based on the :match_request_on option).

Given our file, examples/record_modes/new_episodes/example_original.py, with which we have already recorded examples/record_modes/new_episodes/new-episodes-example.json

If we then run examples/record_modes/new_episodes/example_updated.py

The new request at the end of the file will be added to the cassette without updating the other interactions that were already recorded.

None

The 'none' record mode will:

  • Replay previously recorded interactions.
  • Cause an error to be raised for any new requests.

This is useful when your code makes potentially dangerous HTTP requests. The 'none' record mode guarantees that no new HTTP requests will be made.

Given our file, examples/record_modes/none/example_original.py, with a cassette that already has interactions recorded in examples/record_modes/none/none-example.json

If we then run examples/record_modes/none/example_updated.py

We’ll see an exception indicating that new interactions were prevented:

Once

The 'once' record mode will:

  • Replay previously recorded interactions.
  • Record new interactions if there is no cassette file.
  • Cause an error to be raised for new requests if there is a cassette file.

It is similar to the 'new_episodes' record mode, but will prevent new, unexpected requests from being made (i.e. because the request URI changed or whatever).

'once' is the default record mode, used when you do not set one.

If we have a file, examples/record_modes/once/example_original.py,

And we run it, we’ll see a cassette named examples/record_modes/once/once-example.json has been created.

If we then run examples/record_modes/once/example_updated.py,

We’ll see an exception similar to the one we see when using the 'none' record mode.