在测试中访问虚拟项目的ember cli插件的根路径

时间:2015-11-08 20:35:59

标签: ember.js ember-cli ember-cli-addons

场景:我想知道访问使用插件的项目的根路径的正确方法 - 这在测试时也有效...

例如,插件:

// ember-cli-myaddon/index.js
{

  ...

  contentFor(name) {
    if (name ==='body') {
      var filePath = path.join(this.app.project.root, 'app/some-file.html')
      var file = fs.readFileSync(filePath);

      return [file];
    }
  },

  ...

}

^在实际项目中使用插件时有效。

但是,当我为插件运行测试时,this.app.project.root~/ember-cli-myaddon/app/some-file.html

当我期望(需要)它是~/ember-cli-myaddon/tests/dummy/app/some-file.html

1 个答案:

答案 0 :(得分:3)

经过一些外来挖掘后,我遇到了一个用于ember-cli-mirage的伟大的sol'n,https://github.com/samselikoff/ember-cli-mirage/blob/master/ember-cli-build.js

要点是文件路径是在插件的 ember-cli-build.js 中指定的,插件从该属性读取,当空白时默认为this.app.project.root

e.g。

// ember-cli-myaddon/index.js

// added this
included: function() {
  this.addonPath = this.app.options['myaddon']['directory'] || 'app';
},

// modified filePath
contentFor(name) {
  if (name ==='body') {
    var filePath = path.join(this.app.project.root, this.addonPath, 'some-file.html');
    var file = fs.readFileSync(filePath);

    return [file];
  }
}

然后在插件的 ember-cli-build.js 文件中指定虚拟应用程序的目录:

// ember-cli-build.js

  /* global require, module */

  var path = require('path');
  var EmberApp = require('ember-cli/lib/broccoli/ember-addon');

  module.exports = function(defaults) {
    var app = new EmberApp(defaults, {
      'myaddon': {
        directory: path.join('tests', 'dummy')
      }
    });

    return app.toTree();
  };

现在,插件测试会在以下位置查找 some-file.html ember-cli-myaddon / tests / dummy / app / some-file.html

在实际项目中, some-file.html 在以下位置查找:
您的项目/应用/一些-file.html

另外,您可以获得允许用户在 ember-cli-build.js 文件中配置文件路径的好处!赢/ WIN /赢