Power Query M自定义连接器单元测试无输出结果问题咨询
Power Query M单元测试无有效结果排查
问题描述
我正在Visual Studio Code中使用Power Query M编写Power BI自定义连接器,并尝试为其编写单元测试。编写的测试代码如下:
shared MyExtension.UnitTest = [ TestAccessToken = "nkls8CDwDZZGmjFFDrPFI64X", TestStartTime = "2020-09-13T00:00:00Z", TestEndTime = "2023-06-13T00:00:00Z", TestEndpoint = "Events", result = API.GetRecords(TestEndpoint, TestStartTime,TestEndTime), facts = { Fact("Check that we have three entries in our nav table", 3, Table.RowCount(result)) }, report = Facts.Summarize(facts) ][report];
运行测试后得到如下结果,Output字段全为null,无有效测试结果:
[12:37:57 PM] [Info] RunTestBattery result [ { "ActivityId": "042c992f-409e-49ff-9e7a-fe70477fad69", "DataSourceAnalysis": [ ... ], "Details": "MyExtension.UnitTest", "EndTime": "2023-05-05T19:37:57.4942915+00:00", "Method": "MyExtension.UnitTest", "Name": "API.query.pq", "StartTime": "2023-05-05T19:37:55.0417748+00:00", "Output": [ { "Result": null, "Notes": null, "Details": null }, { "Result": null, "Notes": null, "Details": null } ], "RowCount": 2, "Status": "Passed", "Type": "PQTest.RunTest" } ]
原因分析及修复方案
核心可能原因
API.GetRecords调用参数缺失:你定义了TestAccessToken但未传入API.GetRecords函数,若该接口需要token鉴权,会导致调用失败,返回空数据或错误,进而让Table.RowCount(result)无法得到有效值,最终Fact无法生成有效结果。- 测试框架函数未正确加载:
Fact和Facts.Summarize属于Power Query单元测试专用函数,若连接器项目未正确引入测试依赖,这些函数可能无法正常工作,导致生成的报告无有效内容。 result变量非预期格式:如果API.GetRecords返回的不是标准表格(比如返回null、错误值或非表格结构),Table.RowCount会返回错误或null,使得测试断言无法正常执行。
分步修复
补全
API.GetRecords调用参数
检查API.GetRecords的函数定义,确认是否需要传入TestAccessToken。如果需要,修改调用代码:result = API.GetRecords(TestEndpoint, TestStartTime, TestEndTime, TestAccessToken)单独验证
API.GetRecords返回值
临时修改测试代码,直接返回result而非测试报告,运行后确认返回的是包含3行数据的有效表格:shared MyExtension.UnitTest = [ TestAccessToken = "nkls8CDwDZZGmjFFDrPFI64X", TestStartTime = "2020-09-13T00:00:00Z", TestEndTime = "2023-06-13T00:00:00Z", TestEndpoint = "Events", result = API.GetRecords(TestEndpoint, TestStartTime, TestEndTime, TestAccessToken) ][result];确认测试框架可用性
编写一个极简测试,验证Fact和Facts.Summarize是否正常工作:shared MyExtension.UnitTest = [ facts = { Fact("Test basic assertion", 1, 1) }, report = Facts.Summarize(facts) ][report];如果这个测试能生成有效结果,说明框架本身没问题,问题出在
API.GetRecords的调用上。检查测试运行环境配置
确认VS Code中Power Query测试插件的配置正确,连接器已正确加载,没有权限或网络问题导致API调用失败。
内容的提问来源于stack exchange,提问作者Bill Software Engineer
相关产品推荐
相关产品推荐

