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

运行pact-js消费者示例时遇Native模块查找失败错误求助

问题描述

我正在运行pact-js仓库中的消费者示例,已将示例代码修改为JavaScript版本(避免使用TypeScript),代码如下:

import { PactV3, MatchersV3 } from '@pact-foundation/pact';
import path from 'path';

// 创建消费者与提供者之间的契约
const provider = new PactV3({
  dir: path.resolve(process.cwd(), 'pacts'),
  consumer: 'MyConsumer',
  provider: 'MyProvider',
});

// 用于从Dog API获取数据的客户端,是Pact测试的目标
getMeDogs = (from) => {
  return axios.request({
    baseURL: this.url,
    params: { from },
    headers: { Accept: 'application/json' },
    method: 'GET',
    url: '/dogs',
  });
};

const dogExample = { dog: 1 };
const EXPECTED_BODY = MatchersV3.eachLike(dogExample);

describe('GET /dogs', () => {
  it('返回HTTP 200和狗狗列表', () => {
    // 准备:设置预期交互
    // 使用Pact模拟后端API
    provider
      .given('我有一个狗狗列表')
      .uponReceiving('使用构建器模式请求所有狗狗')
      .withRequest({
        method: 'GET',
        path: '/dogs',
        query: { from: 'today' },
        headers: { Accept: 'application/json' },
      })
      .willRespondWith({
        status: 200,
        headers: { 'Content-Type': 'application/json' },
        body: EXPECTED_BODY,
      });

    return provider.executeTest( async (mockserver) => {
      // 执行:测试API客户端行为是否正确
      // 注意:动态配置DogService客户端指向Pact创建的mock服务,而非真实服务
      dogService = new DogService(mockserver.url);
      const response = await dogService.getMeDogs('today')

      // 断言:检查结果
      expect(response.data[0]).to.deep.eq(dogExample);
    });
  });
});

我新建目录并执行npm init后,生成的package.json配置如下:

{
  "name": "repo1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@pact-foundation/pact": "^12.1.1"
  },
  "type": "module"
}

环境信息

  • Node.js版本:20.10.0
  • npm版本:10.2.3
  • 操作系统:macOS
  • 已全局安装node-gyp
  • 已安装gcc
  • 已安装make

运行报错

将代码保存为cons.js并运行时,出现以下错误:

[15:38:11.420] ERROR (28229): pact-core@14.0.5: Failed to find native module for darwin-x64: TypeError: Cannot read properties of undefined (reading 'pactffiInitWithLogLevel')

解决思路

  • 重新安装依赖并清理缓存
    删除node_modules目录和package-lock.json文件:rm -rf node_modules package-lock.json;清理npm缓存:npm cache clean --force;重新安装依赖:npm install。此操作可修复依赖安装时native模块下载不完整或损坏的问题。

  • 检查版本兼容性
    Pact-js v12.x与Node.js 20.x可能存在兼容性问题,尝试降级Pact-js到稳定兼容版本(如v11.x):修改package.json中@pact-foundation/pact版本为^11.0.0,再执行npm install。

  • 重新构建native模块
    进入node_modules/@pact-foundation/pact-core目录,检查是否存在darwin-x64对应的native文件。若缺失,执行npm rebuild @pact-foundation/pact-core --force强制重新构建,确保gcc、make等工具正常运行。

  • 匹配系统架构
    确认macOS架构是x64还是arm64(M系列芯片):如果是arm64,安装Rosetta 2(softwareupdate --install-rosetta),或强制以x64架构安装依赖:arch -x86_64 npm install。

  • 配置测试运行器
    当前package.json的test脚本未指定测试框架,Pact测试需要配合Mocha/Jest等运行。修改test脚本为:

    "scripts": {
      "test": "mocha cons.js"
    }
    

    同时安装Mocha依赖:npm install mocha --save-dev

内容的提问来源于stack exchange,提问作者Kalyan Vedala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:13:18