从构造函数调用中读取参数

时间:2016-12-13 19:26:46

标签: javascript unit-testing arguments

鉴于

const anInstance = new Plugin({ a: 'path' })

你能否回复给出的论点?

anInstance./* some method */ === [{ a: 'path' }]

// or

someWrapper(anInstance) === [{ a: 'path' }]

限制:

  1. 您无法更改Plugin的内部实施:视为外部依赖。
  2. Plugin可能有多个参数,任何类型。
  3. 您无法将初始参数分配给外部变量,如下所示:

    const config = { a: 'path' }
    const anInstance = new Plugin(config)
    
  4. 后台:我正在尝试为webpack插件配置编写测试。例如:

    module.exports = {
      plugins: [
        new wepback.DllPlugin({
          name: '[name]',
          path: path.join(buildDir, '[name].json'),
        })
      ]
    }
    

    我想测试给DllPlugin的配置。上面的限制#3是因为我不想导出每个插件的配置,因为该导出的唯一消费者将是我的测试。

    如果无法做我的初始询问,那么我将不得不添加这些导出,因为我无法想到任何其他方式来访问这些参数。

1 个答案:

答案 0 :(得分:0)

您可以定义class,使用extend

function Plugin() {}

class getPluginArgs extends Plugin {
  constructor(...args) {
    super();
    this.args = args;
    for (let arg of args) {
      console.log(arg)
    }
  }
  getArgs() {
    return this.args;
  }
}

const anInstance = new getPluginArgs({ a: "path" });
console.log(anInstance instanceof Plugin, anInstance.getArgs());