ember-cli-code-coverage
ember-cli-code-coverage copied to clipboard
Changing ED imports to @ember-data brings model coverage to 0%
Hi! Changing ember-data imports brings models from 100% to 0% code coverage
Test
test("exists", function(assert) {
const model = run(() => this.owner.lookup("service:store").createRecord("some-model"));
assert.ok(!!model);
});
Before (100% code coverage)
import classic from "ember-classic-decorator";
import DS from "ember-data";
const { Model, attr, hasMany, belongsTo } = DS;
@classic
export default class SomeModel extends Model {
@belongsTo
one;
@hasMany
two;
@attr("string")
three;
@attr
chaChaCha;
}
After (0% code coverage)
import classic from "ember-classic-decorator";
import Model, { attr, hasMany, belongsTo } from "@ember-data/model";
@classic
export default class SomeModel extends Model {
@belongsTo
one;
@hasMany
two;
@attr("string")
three;
@attr
chaChaCha;
}
Is this an expected behavior?
Is this an expected behavior?
No. Can you share the transpiled output of that model file with and without COVERAGE=true
set (the contents of the define
statements for that one module comparing COVERAGE=true ember build
vs ember build
)?
Seems like there's a duplication of the app name in generated path property: "/PATH_TO_MY_APP/my-app/my-app/models/some-model.js"
With coverage
define("my-app/models/some-model", [
"exports",
"@babel/runtime/helpers/esm/initializerDefineProperty",
"@babel/runtime/helpers/esm/applyDecoratedDescriptor",
"@babel/runtime/helpers/esm/initializerWarningHelper",
"@ember-data/model"
], function(
_exports,
_initializerDefineProperty2,
_applyDecoratedDescriptor2,
_initializerWarningHelper2,
_model
) {
"use strict";
var cov_2lfcqkfpc7 = (function() {
var path = "/PATH_TO_MY_APP/my-app/my-app/models/some-model.js";
var hash = "c02a4407864b15dd45cb0a7710e4f4fb08e4bba2";
var global = new Function("return this")();
var gcv = "__coverage__";
var coverageData = {
path: "/PATH_TO_MY_APP/my-app/my-app/models/some-model.js",
statementMap: {},
fnMap: {},
branchMap: {},
s: {},
f: {},
b: {},
_coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
hash: "c02a4407864b15dd45cb0a7710e4f4fb08e4bba2"
};
var coverage = global[gcv] || (global[gcv] = {});
if (coverage[path] && coverage[path].hash === hash) {
return coverage[path];
}
return (coverage[path] = coverageData);
})();
Object.defineProperty(_exports, "__esModule", {
value: true
});
_exports.default = void 0;
var _dec,
_class,
_class2,
_descriptor,
_descriptor2,
_descriptor3,
_descriptor4,
_temp;
const classic = __EMBER_CLASSIC_DECORATOR;
let SomeModel = ((_dec = (0, _model.attr)("string")),
classic(
(_class = ((_class2 = ((_temp = class SomeModel extends _model.default {
constructor(...args) {
super(...args);
(0, _initializerDefineProperty2.default)(
this,
"one",
_descriptor,
this
);
(0, _initializerDefineProperty2.default)(
this,
"two",
_descriptor2,
this
);
(0, _initializerDefineProperty2.default)(
this,
"three",
_descriptor3,
this
);
(0, _initializerDefineProperty2.default)(
this,
"chaChaCha",
_descriptor4,
this
);
}
}),
_temp)),
((_descriptor = (0, _applyDecoratedDescriptor2.default)(
_class2.prototype,
"one",
[_model.belongsTo],
{
configurable: true,
enumerable: true,
writable: true,
initializer: null
}
)),
(_descriptor2 = (0, _applyDecoratedDescriptor2.default)(
_class2.prototype,
"two",
[_model.hasMany],
{
configurable: true,
enumerable: true,
writable: true,
initializer: null
}
)),
(_descriptor3 = (0, _applyDecoratedDescriptor2.default)(
_class2.prototype,
"three",
[_dec],
{
configurable: true,
enumerable: true,
writable: true,
initializer: null
}
)),
(_descriptor4 = (0, _applyDecoratedDescriptor2.default)(
_class2.prototype,
"chaChaCha",
[_model.attr],
{
configurable: true,
enumerable: true,
writable: true,
initializer: null
}
))),
_class2))
) || _class);
_exports.default = SomeModel;
});
Without coverage
define("my-app/models/some-model", [
"exports",
"@babel/runtime/helpers/esm/initializerDefineProperty",
"@babel/runtime/helpers/esm/applyDecoratedDescriptor",
"@babel/runtime/helpers/esm/initializerWarningHelper",
"@ember-data/model"
], function(
_exports,
_initializerDefineProperty2,
_applyDecoratedDescriptor2,
_initializerWarningHelper2,
_model
) {
"use strict";
Object.defineProperty(_exports, "__esModule", {
value: true
});
_exports.default = void 0;
var _dec,
_class,
_class2,
_descriptor,
_descriptor2,
_descriptor3,
_descriptor4,
_temp;
const classic = __EMBER_CLASSIC_DECORATOR;
let SomeModel = ((_dec = (0, _model.attr)("string")),
classic(
(_class = ((_class2 = ((_temp = class SomeModel extends _model.default {
constructor(...args) {
super(...args);
(0, _initializerDefineProperty2.default)(
this,
"one",
_descriptor,
this
);
(0, _initializerDefineProperty2.default)(
this,
"two",
_descriptor2,
this
);
(0, _initializerDefineProperty2.default)(
this,
"three",
_descriptor3,
this
);
(0, _initializerDefineProperty2.default)(
this,
"chaChaCha",
_descriptor4,
this
);
}
}),
_temp)),
((_descriptor = (0, _applyDecoratedDescriptor2.default)(
_class2.prototype,
"one",
[_model.belongsTo],
{
configurable: true,
enumerable: true,
writable: true,
initializer: null
}
)),
(_descriptor2 = (0, _applyDecoratedDescriptor2.default)(
_class2.prototype,
"two",
[_model.hasMany],
{
configurable: true,
enumerable: true,
writable: true,
initializer: null
}
)),
(_descriptor3 = (0, _applyDecoratedDescriptor2.default)(
_class2.prototype,
"three",
[_dec],
{
configurable: true,
enumerable: true,
writable: true,
initializer: null
}
)),
(_descriptor4 = (0, _applyDecoratedDescriptor2.default)(
_class2.prototype,
"chaChaCha",
[_model.attr],
{
configurable: true,
enumerable: true,
writable: true,
initializer: null
}
))),
_class2))
) || _class);
_exports.default = SomeModel;
});
Hi, @rwjblue ! Any updates on this one?
Sorry for the run around here, would mind sharing the same output (with coverage vs without coverage) for the model version without decorators? I'm trying to figure out why we are missing coverage info 🤔...
Useless example. Should compare global vs named import output instead. *See example in description for #292
~Output for model~
@classic
export default class Survey extends Model.extend({
one: belongsTo(),
two: hasMany(),
three: attr("string"),
chaChaCha: attr()
}) {}
~With coverage~
define("my-app/models/some-model", ["exports", "@ember-data/model"], function (
_exports,
_model
) {
"use strict";
var cov_2lfcqkfpc7 = (function () {
var path = "/PATH_TO_MY_APP/my-app/my-app/models/some-model.js";
var hash = "c02a4407864b15dd45cb0a7710e4f4fb08e4bba2";
var global = new Function("return this")();
var gcv = "__coverage__";
var coverageData = {
path: "/PATH_TO_MY_APP/my-app/my-app/models/some-model.js",
statementMap: {},
fnMap: {},
branchMap: {},
s: {},
f: {},
b: {},
_coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
hash: "c02a4407864b15dd45cb0a7710e4f4fb08e4bba2",
};
var coverage = global[gcv] || (global[gcv] = {});
if (coverage[path] && coverage[path].hash === hash) {
return coverage[path];
}
return (coverage[path] = coverageData);
})();
Object.defineProperty(_exports, "__esModule", {
value: true,
});
_exports.default = void 0;
var _class;
const classic = __EMBER_CLASSIC_DECORATOR;
let SomeModel =
classic(
(_class = class SomeModel extends _model.default.extend({
one: (0, _model.belongsTo)(),
two: (0, _model.hasMany)(),
three: (0, _model.attr)("string"),
chaChaCha: (0, _model.attr)(),
}) {})
) || _class;
_exports.default = SomeModel;
});
~Without coverage~
define("my-app/models/some-model", ["exports", "@ember-data/model"], function (
_exports,
_model
) {
"use strict";
Object.defineProperty(_exports, "__esModule", {
value: true,
});
_exports.default = void 0;
var _class;
const classic = __EMBER_CLASSIC_DECORATOR;
let SomeModel =
classic(
(_class = class SomeModel extends _model.default.extend({
one: (0, _model.belongsTo)(),
two: (0, _model.hasMany)(),
three: (0, _model.attr)("string"),
chaChaCha: (0, _model.attr)(),
}) {})
) || _class;
_exports.default = SomeModel;
});
@rwjblue I've added a reproduction in #292
@rwjblue Hi! Any progress on this one?