Ember-CLI-Mirage throws error when defining relationship in Mirage Model

Hi there,

I would be really happy if someone could fix this problem… I already searched the Mirage issues section, google, here on ember discuss, etc.

Everything is working fine as soon as I define a relationship on a Mirage Model the console throws the following error:

All I want to do is having a relationship between 2 models: Competition and Fixture (Football related).

My related files are looking like that:

Models

// app/models/competition.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { hasMany } from 'ember-data/relationships';

export default Model.extend({
  caption: attr('string'),
  league: attr('string'),
  year: attr('number'),
  currentMatchday: attr('number'),
  numberOfMatchdays: attr('number'),
  numberOfTeams: attr('number'),
  numberOfGames: attr('number'),
  lastUpdated: attr('date'),
  fixtures: hasMany('fixture'),
});
// app/models/fixture.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo } from 'ember-data/relationships';

export default Model.extend({
  date: attr('date'),
  status: attr('string'),
  matchday: attr('number'),
  homeTeamName: attr('string'),
  awayTeamName: attr('string'),
  competition: belongsTo('competition'),
});

// mirage/models/competition.js

import { Model, hasMany } from 'ember-cli-mirage';

export default Model.extend({
  fixtures: hasMany(),
});
// mirage/models/competition.js

import { Model, belongsTo } from 'ember-cli-mirage';

export default Model.extend({
  competition: belongsTo(),
});

Fixtures

// mirage/fixtures/competitions.js

export default [
  {
    id: 1,
    caption: 'European Championships France 2016',
    league: 'EC',
    year: '2016',
    currentMatchday: 3,
    numberOfMatchdays: 7,
    numberOfTeams: 24,
    numberOfGames: 38,
    lastUpdated: '2016-06-22T04:34:39Z',
    fixtures: [1, 2],
  },
];
// mirage/fixtures/fixtures.js

export default [
  {
    id: 1,
    date: '2016-06-10T19:00:00Z',
    status: 'FINISHED',
    matchday: 1,
    homeTeamName: 'France',
    awayTeamName: 'Romania',
    competition: 1,
  },
  {
    id: 2,
    date: '2016-06-10T19:00:00Z',
    status: 'FINISHED',
    matchday: 1,
    homeTeamName: 'Italy',
    awayTeamName: 'Germany',
    competition: 1,
  },
];

Adapter

// app/adapters/application.js

import DS from 'ember-data';
import ENV from '../config/environment';

export default DS.RESTAdapter.extend({
  host: ENV.dataInterface,
  namespace: ENV.namespace,
});
// host = 'http://localhost:4200'
// namespace = 'api'

Serializers

// app/serializers/application.js

import RESTSerializer from 'ember-data/serializers/rest';

export default RESTSerializer.extend({
});
// mirage/serializers/application.js

import { RestSerializer } from 'ember-cli-mirage';

export default RestSerializer.extend({
});

If I comment out the fixtures hasMany relationship on the Mirage model, I’m not getting the error anymore, but of course I need that relationship.

I’m using the (currently) latest ember-cli-mirage version which is 0.2.1.

If you need further information, please let me know and I’ll provide you!

Thanks in advance!!! =)

In the fixtures, the relationships need to be defined in terms of ids. So for
mirage/fixtures/competitions.js

...
fixtureIds: [1, 2]

and for mirage/fixtures/fixtures.js

...
competitionId: 1

I think that’s your problem. Let me know if that helps at all!

Unfortunately this also doesn’t work, because by default it’s camelcased and pluralized as documented here.

But thanks for your reply :smiley:

Any other thoughts??

Hmm… After some more playing around, I just removed both relationship declarations from both Mirage models and everything just works fine :joy: Oh man…