dbt 1.8单元测试报错:依赖节点xyz未找到,求解决建议
dbt 1.8单元测试编译错误排查方案
问题描述
首次在dbt 1.8中尝试unit_tests时遇到编译错误,提示:
测试依赖名为xyz的节点未在宏ref(macros/path/ref.sql)中找到
已完成的排查动作:
- 确认xyz存在于dbt_project中
- 尝试用source替代ref作为测试输入
- 确认fixtures目录结构配置正确
- 尝试dict、sql等其他格式编写测试,但错误依旧
用户的unit_tests配置yml文件:
version: 2 unit_tests: - name: test_state description: "check state" model: location given: - input: ref('details') format: csv fixture: mock_details - input: ref('all_details') format: csv fixture: mock_all_details - input: ref('all_values') format: csv fixture: mock_all_values expect: format: csv fixture: mock_state_comparison
解决方向
1. 适配自定义ref宏的单元测试场景
错误提示明确指向macros/path/ref.sql这个自定义ref宏,dbt 1.8的单元测试对ref宏的处理有特殊逻辑,自定义宏可能未适配该场景:
- 临时注释自定义ref宏,使用dbt原生ref宏测试是否能正常编译
- 若需保留自定义宏,需在宏中添加单元测试场景的分支逻辑:
{% macro ref(model_name) %} {% if execute and not var('is_unit_test', false) %} -- 原自定义ref逻辑 {% else %} -- 单元测试场景下返回原生ref结果 {{ return(dbt.ref(model_name)) }} {% endif %} {% endmacro %}
同时在dbt_project.yml中添加变量配置:
vars: is_unit_test: false
执行单元测试时通过命令行传入变量:
dbt test --select unit_test:* --vars '{"is_unit_test": true}'
2. 确认依赖节点的可见性
- 检查xyz节点所在目录是否被
dbt_project.yml的models配置包含,未被扫描的节点无法被ref识别 - 确认xyz节点未被
exclude规则过滤
3. 核对单元测试配置细节
- 确保
given中ref引用的节点名称与实际模型名称完全一致(大小写敏感) - 若自定义了fixtures路径,需在
dbt_project.yml中明确配置:
unit_tests: fixtures_path: "tests/unit/my_fixtures"
内容的提问来源于stack exchange,提问作者testenthu
相关产品推荐
相关产品推荐

