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

关于withExponents Mixin的导出、导入与测试适配问题求助

我来帮你搞定这个问题!你的代码主要有两个核心问题:Mixin的调用逻辑不对,以及导出导入的配置没踩对路子。咱们一步步来修正:

问题分析与完整修正方案

1. 修复Mixin的实现逻辑

你的withExponents当前是返回一个新对象,但你在测试里用withExponents.call(calculator)的方式完全没发挥作用——因为call只是改变函数内部的this指向,但你的函数根本没用到this,也没把方法挂载到传入的实例上。我们需要修改Mixin,让它直接把方法添加到目标对象上:

// withExponents.js
const withExponents = function (obj) {
  // 直接把方法挂载到传入的obj实例上,而不是返回新对象
  Object.assign(obj, {
    pow(num1, num2) { return Math.pow(num1, num2); },
    multiplyExp(array1, array2) { return Math.pow(...array1) * Math.pow(...array2); },
    divideExp(array1, array2) { return Math.pow(...array1) / Math.pow(...array2); }
  });
  // 可选:返回obj方便链式调用
  return obj;
}

// CommonJS环境(比如Node.js/Mocha测试)的正确导出方式
module.exports = withExponents;

// 如果是ES模块环境(用import/export),改成下面这样:
// export default function withExponents(obj) {
//   Object.assign(obj, { /* 方法同上 */ });
//   return obj;
// }

2. 修正测试文件的导入与调用

首先得确保你测试里用到的Calculator类是存在的(你之前的测试里直接用了但没定义),然后正确导入Mixin并调用:

CommonJS环境示例(比如Mocha测试):

// calculator.test.js
const withExponents = require('./withExponents');

// 先定义你的Calculator类(空类也可以,或者加基础计算方法)
class Calculator {}

describe("withExponents", function() {
  var calculator;
  beforeEach(function() {
    calculator = new Calculator();
    // 直接把实例传入Mixin,完成方法挂载
    withExponents(calculator);
  });

  it("returns 2^3", function() { 
    expect(calculator.pow(2, 3)).to.equal(8); 
  });

  it("multiplies 2^3 and 2^4", function() { 
    expect(calculator.multiplyExp([2, 3], [2, 4])).to.equal(128); 
  });

  it("divides 2^3 by 2^5", function() { 
    expect(calculator.divideExp([2, 3], [2, 5])).to.equal(0.25); 
  });
});

ES模块环境示例:

把导入语句改成import withExponents from './withExponents.js';,其余逻辑完全一致。

3. 踩坑复盘:为什么原代码跑不通?

  • 原Mixin返回新对象,但你用withExponents.call(calculator)时,既没给函数传obj参数,也没把返回的新对象赋值给calculator,导致原实例根本没拿到那些方法。
  • 导出时module.exports = withExponents是正确的,绝对不能加括号——加括号会变成立即执行函数,导出的是函数执行结果而非函数本身,这大概率是你之前尝试时的坑点。

现在运行测试应该就能全部通过了!

内容的提问来源于stack exchange,提问作者333Matt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:39:10