title | layout | nav_order |
---|---|---|
Mocking |
default |
5 |
This Bats helper library provides command mocking functionality for BATS.
It allows to mock commands and check how they were called.
This is a very powerful feature that allows to test complex scenarios as unit tests.
{: .note } To run multiple mock assertions, check out the step runner helper.
This functionality is based on the bats-mock project. A special thank you to the contributors for their original work.
setup() {
setup_mock
}
# Example to test the notify.sh script that uses curl to send a notification to external system.
@test "Notify" {
app_id="9876543210"
# Mock curl command.
mock_curl=$(mock_command "curl")
# Setup mock responses for curl call with specific arguments in notify.sh.
mock_set_output "${mock_curl}" "12345678910-1234567890-${app_id}-12345" 1
mock_set_output "${mock_curl}" "201" 2
run ./notify.sh
assert_success
# Single line mock assertion example.
assert_equal "-s -X GET https://api.example.com/v2/applications.json" "$(mock_get_call_args "${mock_curl}" 1)"
# Multi-line mock assertion example.
assert_equal '-X POST https://api.example.com/v2/applications/9876543210/deployments.json -d {
"deployment": {
"description": "example description",
}
}' "$(mock_get_call_args "${mock_curl}" 2)"
}
Setup mock support. Call this function from your test's setup()
method.
- Description: Mock provided command.
- Arguments:
- Mocked command name
- Outputs: Path to created mock file.
- Usage:
mock_command "ls"
- Description: Sets the output of the mock.
- Arguments:
- Path to the mock
- Output or
-
for STDIN - Index of the call (optional)
- Usage:
mock_set_output ${mock} "some output"
- Description: Sets the exit status of the mock.
- Arguments:
- Path to the mock
- Status
- Index of the call (optional)
- Usage:
mock_set_status ${mock} 0
- Description: Sets the side effect of the mock.
- Arguments:
- Path to the mock
- Side effect or
-
for STDIN - Index of the call (optional)
- Usage:
mock_set_side_effect ${mock} "some_command"
- Description: Returns the arguments line the mock was called with.
- Arguments:
- Path to the mock
- Index of the call (optional)
- Outputs: Arguments line
- Usage:
assert_equal "expected_arg1 expected_arg2" "$(mock_get_call_args "${mock}" 1)"
- Description: Returns the number of times the mock was called.
- Arguments:
- Path to the mock
- Outputs: Number of calls
- Usage:
assert_equal "1" "$(mock_get_call_num "${mock}" 1)"
- Description: Returns the user the mock was called with.
- Arguments:
- Path to the mock
- Index of the call (optional)
- Outputs: User name
- Usage:
assert_equal "expected_user" "$(mock_get_call_user "${mock}" VAR_NAME 1)"
- Description: Returns the value of the environment variable the mock was called with.
- Arguments:
- Path to the mock
- Variable name
- Index of the call (optional)
- Outputs: Variable value
- Usage:
assert_equal "expected_val1" "$(mock_get_call_env "${mock}" VAR_NAME 1)"