You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: update mocking docs with new override_during attribute (#36312)
* docs: update mocking docs with new override_during attribute
* include mock_resource and mock_data
* Apply suggestions from code review
Co-authored-by: Brian McClain <brianmmcclain@gmail.com>
---------
Co-authored-by: Brian McClain <brianmmcclain@gmail.com>
Copy file name to clipboardExpand all lines: website/docs/language/tests/mocking.mdx
+14-4Lines changed: 14 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -105,9 +105,19 @@ Mocked providers only generate data for computed attributes. All required resour
105
105
106
106
An example of this is the `bucket` attribute in the `aws_s3_bucket` resource. A real AWS provider will generate a bucket name if one is not specified. A mocked AWS provider will do the same, and only generate a value if one is not already specified in the configuration.
107
107
108
+
By default, Terraform generates data during the `apply` operation and returns `(known after apply)` values during the `plan` operation. You can override this behavior with the `override_during` attribute in the `mock_provider` block:
109
+
110
+
```hcl
111
+
mock_provider "aws" {
112
+
override_during = plan
113
+
}
114
+
```
115
+
116
+
The above `aws` provider generates the data during the `plan` operation and reuses the same data during the `apply` operation. The `override_during` attribute accepts either `plan` or `apply` as values.
117
+
108
118
### Mock Provider data
109
119
110
-
You can specify specific values for targeted resources and data sources. in a `mock_provider` block, you can write any number of `mock_resource` and `mock_data` blocks. Both the `mock_resource` and `mock_data` blocks accept a type argument that should match the resource or data source you want to provide values for. They also accept a `defaults` object attribute that you can use to specify the values that should be returned for specific attributes.
120
+
You can specify specific values for targeted resources and data sources. In a `mock_provider` block, you can write any number of `mock_resource` and `mock_data` blocks. Both the `mock_resource` and `mock_data` blocks accept a type argument that should match the resource or data source you want to provide values for. They also accept a `defaults` object attribute that you can use to specify the values that should be returned for specific attributes.
111
121
112
122
The following example demonstrates providing a set `arn` value for all AWS S3 bucket resources and data sources:
113
123
@@ -127,7 +137,7 @@ mock_provider "aws" {
127
137
}
128
138
```
129
139
130
-
In the above example, Terraform uses the supplied value for `arn` attributes in S3 buckets instead of generating a random string. Computed attributes not provided an explicit default will simply fall back to the generic data generation rules.
140
+
In the above example, Terraform uses the supplied value for `arn` attributes in S3 buckets instead of generating a random string. Computed attributes not provided an explicit default will simply fall back to the generic data generation rules. You can also use the `override_during` attribute in the `mock_resource` and `mock_data` blocks to specify when Terraform should generate the values for an individual resource. If you do not not specify the `override_during` attribute, Terraform generates the values using the rules inherited from the `mock_provider` block. If specified, the local value overrides any value specified in the `mock_provider` block.
131
141
132
142
You can also share mock provider data between tests by writing dedicated mock data files and using the `source` attribute in the `mock_provider` block. Mock data files have `.tfmock.hcl` or `.tfmock.json` extension, and can contain `mock_resource` and `mock_data` blocks as if they were defined in the `mock_provider` block directly.
133
143
@@ -171,9 +181,9 @@ Overrides can be used with both real and mocked providers and will provide the c
171
181
172
182
### Overrides Syntax
173
183
174
-
All override blocks contain a `target` attribute, which should specify the resource, data source, or module to override. The `override_module` blocks contain an `outputs` attribute, while the `override_resource` and `override_data` blocks contain a `values` attribute.
184
+
All override blocks contain a `target` attribute, which should specify the resource, data source, or module to override. The `override_module` blocks contain an `outputs` attribute, while the `override_resource` and `override_data` blocks contain a `values` attribute. The override blocks also support the `override_during` attribute.
175
185
176
-
The `outputs` and `values` attributes are optional and if not specified, Terraform will generate values for them automatically.
186
+
The `outputs` and `values` attributes are optional and if not specified, Terraform will generate values for them automatically. The `override_during` attribute is also optional, and if specified it will override the `override_during` attribute in the `mock_provider` block. If not specified, Terraform inherits the behavior from the `mock_provider` block.
177
187
178
188
The following example demonstrates the override blocks at various different scopes and levels. The main configuration calls the `./modules/s3_data` module to read a file from an S3 bucket, and then creates a `local_file` from the data returned from the module.
0 commit comments