用代理对象模拟JXA调用

时间:2019-06-14 06:54:00

标签: javascript es6-proxy javascript-automation

为了能够测试JXA脚本,我想模拟JXA调用。以下代码使我可以创建所需功能的一部分。

const mockMusicObject = songs => {
  const jxaSongs = songs.map(
    song =>
      new Proxy(song, {
        get(target, propKey) {
          if (!Object.keys(song).includes(propKey)) {
            return;
          }

          return (...args) => target[propKey];
        }
      })
  );

  global.Application = () => ({ selection: () => jxaSongs });
};

const songs = [{ artist: "Artist 1", name: "Name 1" }];
mockMusicObject(songs);

问题是似乎没有办法确定Proxy对象中哪些调用是方法调用和属性。

似乎只有以下一种选择是可能的(因为artist属性与方法是无法区分的):

const music = Application("Music");
music.selection()[0].artist();
const music = Application("Music");
music.selection()[0].artist.set("New Artist");

这有可能吗? This suggests不是,但对于JXA,我想知道是否还有其他技术。

0 个答案:

没有答案