Bird
Raised Fist0
Terraformcloud~10 mins

Test file structure in Terraform - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Process Flow - Test file structure
Create test file
Write test blocks
Define resources and variables
Run terraform test command
Check test results
Pass or Fail
This flow shows how a Terraform test file is created, written with test blocks, run, and checked for results.
Execution Sample
Terraform
terraform {
  required_version = ">= 1.5"
}

resource "null_resource" "example" {}

test "example_test" {
  check "basic" {
    assert {
      condition = true
      error_message = "Test failed"
    }
  }
}
This sample defines a simple Terraform configuration with a test block to check resource behavior.
Process Table
StepActionFile ContentCommand RunResult
1Create test filetest_example.tf with resource and test blockFile created
2Write test blockstest block with checks addedTest defined
3Run terraform testterraform testTests executed
4Check test resultsTests pass or fail
5ExitN/AN/ATesting complete
💡 All test steps completed, test results determine pass or fail
Status Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
test_filenonecreatedwrittenexecutedresults checked
test_resultnonenonenonerunningpass/fail
Key Moments - 2 Insights
Why do we need a separate test file in Terraform?
Terraform separates test files to keep configuration and tests organized, as shown in step 1 and 2 of the execution_table.
What happens when we run 'terraform test'?
The command executes all test blocks in test files, shown in step 3, producing pass or fail results in step 4.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the file content after step 2?
AOnly resource definitions
BTest block with checks added
CEmpty file
DTest results
💡 Hint
Refer to the 'File Content' column in row for step 2 in execution_table
At which step does the test execution happen?
AStep 1
BStep 4
CStep 3
DStep 5
💡 Hint
Check the 'Command Run' column in execution_table for the step running 'terraform test'
If the test file was not written correctly, what would change in the execution_table?
AStep 3 would show test execution failure
BStep 1 would fail to create file
CStep 5 would be skipped
DStep 2 would show empty file
💡 Hint
Look at step 3 and 4 results in execution_table for test execution and results
Concept Snapshot
Terraform test files are separate .tf files
They contain test blocks with checks
Run tests using 'terraform test' command
Tests show pass or fail results
Keep tests organized and separate from main config
Full Transcript
This visual execution shows how to create and run a Terraform test file. First, a test file is created and written with test blocks that define checks. Then, the 'terraform test' command runs these tests. Finally, results are checked to see if tests pass or fail. This separation helps keep configuration and tests organized.

Practice

(1/5)
1. What is the main reason to keep Terraform test files separate from production code files?
easy
A. Because Terraform does not support test files inside the main folder
B. To avoid mixing test code with production code and keep the project organized
C. To reduce the size of the Terraform state file
D. Because test files must be written in a different language

Solution

  1. Step 1: Understand file organization purpose

    Separating test files helps keep the project clean and easier to manage by not mixing test and production code.
  2. Step 2: Recognize Terraform best practices

    Terraform encourages clear separation to avoid confusion and accidental deployment of test code.
  3. Final Answer:

    To avoid mixing test code with production code and keep the project organized -> Option B
  4. Quick Check:

    Separate test files = organized project [OK]
Hint: Keep test files separate to avoid confusion [OK]
Common Mistakes:
  • Thinking test files must be in main folder
  • Believing test files affect state size
  • Assuming test files require different language
2. Which of the following is the correct folder structure for organizing Terraform files including tests?
easy
A. /main.tf, /variables.tf, /outputs.tf, /test/main_test.tf
B. /main.tf, /variables.tf, /outputs.tf, /modules/tests/test_main.tf
C. /main.tf, /variables.tf, /outputs.tf, /tests/test_main.tf
D. /main.tf, /variables.tf, /outputs.tf, /tests/main_test.tf

Solution

  1. Step 1: Identify standard test folder naming

    Tests are usually placed in a separate folder named 'tests' at the root level for clarity.
  2. Step 2: Check file naming conventions

    Test files often have '_test' suffix to indicate their purpose, e.g., 'main_test.tf'.
  3. Final Answer:

    /main.tf, /variables.tf, /outputs.tf, /tests/main_test.tf -> Option D
  4. Quick Check:

    Tests folder with *_test.tf files = correct structure [OK]
Hint: Use 'tests' folder with *_test.tf files [OK]
Common Mistakes:
  • Placing tests inside modules folder
  • Naming test folder as 'test' instead of 'tests'
  • Not using _test suffix for test files
3. Given this Terraform project structure:
/main.tf
/variables.tf
/outputs.tf
/tests/test_main.tf

What will happen if you run terraform apply from the root directory?
medium
A. Terraform will apply infrastructure defined in main.tf and ignore test files
B. Terraform will apply both main.tf and test_main.tf causing errors
C. Terraform will only apply test_main.tf and ignore main.tf
D. Terraform will fail because test files are not allowed

Solution

  1. Step 1: Understand Terraform file loading behavior

    Terraform loads *.tf files in the current directory but ignores files in subfolders unless explicitly included.
  2. Step 2: Recognize test folder separation effect

    Files inside /tests are not loaded by default during terraform apply, so only main.tf and related files are applied.
  3. Final Answer:

    Terraform will apply infrastructure defined in main.tf and ignore test files -> Option A
  4. Quick Check:

    Terraform applies root *.tf files only [OK]
Hint: Terraform ignores test folder files by default [OK]
Common Mistakes:
  • Assuming terraform applies all .tf files recursively
  • Thinking test files run automatically
  • Believing terraform apply fails due to test files
4. You have this folder structure:
/main.tf
/variables.tf
/outputs.tf
/tests/test_main.tf

Running terraform apply gives an error about duplicate resource definitions. What is the likely cause?
medium
A. Outputs are missing in outputs.tf
B. Variables are defined twice in variables.tf
C. Terraform is loading test_main.tf and main.tf causing duplicate resources
D. Terraform state file is corrupted

Solution

  1. Step 1: Analyze error cause

    Duplicate resource errors usually mean Terraform sees the same resource defined more than once.
  2. Step 2: Check file loading

    If test files are accidentally loaded (e.g., by running terraform in /tests), resources duplicate with main.tf definitions.
  3. Final Answer:

    Terraform is loading test_main.tf and main.tf causing duplicate resources -> Option C
  4. Quick Check:

    Duplicate resources = multiple files loaded [OK]
Hint: Run terraform only in root, not in tests folder [OK]
Common Mistakes:
  • Blaming variables or outputs for duplicate resource error
  • Ignoring that test files can cause duplicates if loaded
  • Assuming state file corruption without checking files
5. You want to reuse infrastructure code in multiple projects and keep tests separate. Which folder structure best supports this using Terraform modules and tests?
hard
A. /modules/network/main.tf, /modules/network/variables.tf, /tests/network_test.tf, /main.tf
B. /network/main.tf, /network/variables.tf, /tests/network_test.tf, /main.tf
C. /modules/network/main.tf, /tests/network/main_test.tf, /main.tf
D. /modules/network/main.tf, /modules/network/tests/network_test.tf, /main.tf

Solution

  1. Step 1: Identify module folder best practice

    Modules should be inside a 'modules' folder with their own files for reuse.
  2. Step 2: Separate tests outside modules

    Tests should be in a top-level 'tests' folder to avoid mixing with reusable module code.
  3. Final Answer:

    /modules/network/main.tf, /modules/network/variables.tf, /tests/network_test.tf, /main.tf -> Option A
  4. Quick Check:

    Modules in 'modules', tests in 'tests' folder [OK]
Hint: Keep modules and tests in separate top-level folders [OK]
Common Mistakes:
  • Placing tests inside modules folder
  • Not using a modules folder for reusable code
  • Mixing test files with main project files