如何为需要某些全局变量的javascript'plugin'(iframe)编写单元测试

时间:2017-11-30 17:24:53

标签: javascript unit-testing iframe trello

我正在研究Trello Power Up。他们的工作方式是加载您提供的iFrame,其中包含一些包含自定义代码的script代码。您可以看到一个有效的示例here。结果是,当您的代码运行时,存在某些与您交互的“全局”(甚至不确定这是否是正确的单词)对象。例如:

const Promise = TrelloPowerUp.Promise;

TrelloPowerUp.initialize({
  'card-buttons': (t, options) => {
    return [{
      text: 'Awesome Button',
    }];
  }, 'show-settings': (t, options) =>{
    return t.popup({
      title: 'Settings',
      url: './settings.html',
      height: 184 // we can always resize later, but if we know the size in advance, its good to tell Trello
    });
  }
});

我开始为这个项目添加一些复杂性,我的习惯是使用tdd / write单元测试。我无法弄清楚这段代码是如何可测试的。

在运行mocha测试之前,有没有办法提供模拟'TrelloPowerUp'全局对象?我试过了:

TrelloPowerUp = {}
require('./client.js');

(client.js脚本在导入后立即运行...)毫不奇怪,这不起作用。

我想我可以从另一个有单元测试的文件中导入,以最小化不可测试的代码,例如:

从'./TrelloInitActions'

导入TrelloInitActions
const Promise = TrelloPowerUp.Promise;

TrelloPowerUp.initialize({
  'card-buttons': TrelloInitActions.initButtons
}, 'show-settings': TrelloInitActions.showSettings
});

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

要解决这个问题,我正在使用反应,如果你发现自己处于这种情况,请查看https://www.npmjs.com/package/trello-react-scripts