Scenár: Chcel by som poznať správny spôsob prístupu na koreňovú cestu projektu, ktorý konzumuje doplnok - ktorý funguje aj pri testovaní ...
napr. doplnok:
// 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];
}
},
...
}
^ ktorý funguje pri použití doplnku vo vnútri skutočného projektu.
Keď však spustím testy doplnku, this.app.project.root
je ~/ember-cli-myaddon/app/some-file.html
Kedy očakávam (potrebujem), že bude ~/ember-cli-myaddon/tests/dummy/app/some-file.html
odpovede:
3 pre odpoveď č. 1Po nejakom kopaní žeravého addonu som narazil na skvelý sol používaný v ember-cli-mirage, https://github.com/samselikoff/ember-cli-mirage/blob/master/ember-cli-build.js
Podstatou je, že cesta k súboru je uvedená v zozname doplnkov ember-cli-build.js a doplnok číta z tejto vlastnosti, predvolene je this.app.project.root
keď je prázdne.
napr.
// 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];
}
}
a potom vo vnútri doplnku ember-cli-build.js súboru určíme adresár fiktívnej aplikácie:
// 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();
};
A teraz sa hľadajú testy doplnkov some-file.html na adrese:
ember-cli-myaddon / tests / dummy / app / some-file.html
a vo vnútri skutočného projektu, some-file.html sa hľadá na:
váš projekt / aplikácia / nejaký-súbor.html
Plus získate bonus umožňujúci používateľovi konfigurovať cestu k súboru vo svojom ember-cli-build.js pilník! vyhrať / vyhrať / vyhrať