You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,使得测试断言无法正常执行。

分步修复

  1. 补全API.GetRecords调用参数
    检查API.GetRecords的函数定义,确认是否需要传入TestAccessToken。如果需要,修改调用代码:

    result = API.GetRecords(TestEndpoint, TestStartTime, TestEndTime, TestAccessToken)
    
  2. 单独验证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];
    
  3. 确认测试框架可用性
    编写一个极简测试,验证Fact和Facts.Summarize是否正常工作:

    shared MyExtension.UnitTest =
    [
        facts =
        {
            Fact("Test basic assertion", 1, 1)
        },
        report = Facts.Summarize(facts)
    ][report];
    

    如果这个测试能生成有效结果,说明框架本身没问题,问题出在API.GetRecords的调用上。

  4. 检查测试运行环境配置
    确认VS Code中Power Query测试插件的配置正确,连接器已正确加载,没有权限或网络问题导致API调用失败。

内容的提问来源于stack exchange,提问作者Bill Software Engineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:32:44