test-cjs.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /**
  2. * 测试CommonJS格式的监控SDK bundle
  3. */
  4. // 在Node.js环境中测试CJS格式的bundle
  5. console.log("开始测试CommonJS格式的监控SDK");
  6. try {
  7. // 动态引入CJS格式的bundle
  8. const MonitorSDK = require("../dist/bundle-cjs.js");
  9. console.log("CommonJS格式的监控SDK已加载");
  10. console.log("MonitorSDK类型:", typeof MonitorSDK);
  11. // 注意:由于Node.js环境缺少浏览器API(如window、document、performance等)
  12. // 直接初始化可能会出错,所以我们只测试基本导入功能
  13. // 检查MonitorSDK构造函数是否存在
  14. if (typeof MonitorSDK === "function") {
  15. console.log("✅ MonitorSDK构造函数存在");
  16. } else {
  17. console.log("❌ MonitorSDK不是函数");
  18. }
  19. console.log("\n注意:由于Node.js环境缺少浏览器API,完整的SDK功能无法在此环境中测试。");
  20. console.log("完整的功能测试需要在浏览器环境中进行。");
  21. } catch (error) {
  22. console.error("❌ 加载CommonJS格式的bundle时出错:", error.message);
  23. }
  24. // 模拟浏览器环境的部分功能以测试SDK
  25. console.log("\n--- 模拟浏览器环境测试 ---");
  26. // 为Node.js环境模拟必要的浏览器API
  27. global.window = global;
  28. global.document = {
  29. addEventListener: function (event, handler) {
  30. console.log(`模拟添加${event}事件监听器`);
  31. },
  32. };
  33. global.performance = {
  34. timing: {
  35. navigationStart: Date.now(),
  36. domainLookupStart: Date.now(),
  37. domainLookupEnd: Date.now() + 1,
  38. connectStart: Date.now() + 1,
  39. connectEnd: Date.now() + 2,
  40. requestStart: Date.now() + 2,
  41. responseStart: Date.now() + 3,
  42. responseEnd: Date.now() + 4,
  43. domLoading: Date.now() + 5,
  44. domContentLoadedEventStart: Date.now() + 6,
  45. domContentLoadedEventEnd: Date.now() + 7,
  46. loadEventStart: Date.now() + 8,
  47. loadEventEnd: Date.now() + 9,
  48. },
  49. getEntriesByType: function (type) {
  50. console.log(`模拟获取${type}类型的性能条目`);
  51. return [];
  52. },
  53. };
  54. global.navigator = {
  55. userAgent: "Test Node Environment",
  56. sendBeacon: function (url, data) {
  57. console.log("模拟sendBeacon调用:", url, data);
  58. return true;
  59. },
  60. };
  61. global.fetch = function (url, options) {
  62. console.log("模拟fetch调用:", url, options);
  63. return Promise.resolve({
  64. ok: true,
  65. json: () => Promise.resolve({}),
  66. });
  67. };
  68. // 现在尝试动态加载并初始化SDK
  69. setTimeout(() => {
  70. try {
  71. // 重新require以确保使用新的全局变量
  72. delete require.cache[require.resolve("../dist/bundle-cjs.js")];
  73. const MonitorSDK = require("../dist/bundle-cjs.js");
  74. // 创建实例
  75. const monitor = new MonitorSDK({
  76. appId: "test-app",
  77. apiUrl: "http://localhost:3000/api/monitor",
  78. enableErrorTracking: true,
  79. enablePerformanceTracking: true,
  80. enableUserBehaviorTracking: false, // 避免在Node.js中使用document
  81. enableResourceTracking: true,
  82. sampleRate: 1.0,
  83. });
  84. console.log("✅ 成功创建MonitorSDK实例");
  85. // 测试错误上报功能
  86. if (monitor && typeof monitor.reportError === "function") {
  87. console.log("✅ reportError方法存在");
  88. monitor.reportError({
  89. type: "test_error",
  90. message: "测试错误",
  91. timestamp: Date.now(),
  92. });
  93. console.log("✅ 成功调用reportError方法");
  94. } else {
  95. console.log("❌ reportError方法不存在");
  96. }
  97. // 测试数据上报功能
  98. if (monitor && typeof monitor.reportData === "function") {
  99. console.log("✅ reportData方法存在");
  100. monitor.reportData({
  101. type: "test_data",
  102. message: "测试数据",
  103. timestamp: Date.now(),
  104. });
  105. console.log("✅ 成功调用reportData方法");
  106. } else {
  107. console.log("❌ reportData方法不存在");
  108. }
  109. } catch (error) {
  110. console.error("❌ 在模拟环境中初始化SDK时出错:", error.message);
  111. console.error("堆栈:", error.stack);
  112. }
  113. }, 100);