Поддельные вызовы JXA с объектом Proxy - PullRequest
0 голосов
/ 14 июня 2019

Для того, чтобы иметь возможность тестировать 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");

Это вообще возможно? Это говорит о том, что это не так, но для JXA мне интересно, есть ли другие методы.

...