Container testing methods and computed properties follow previous patterns shown in
Testing Basics because
DS.Model
extends Ember.Object.
Ember Data Models can be tested in a module that uses the
setupTest
helper.
Let's assume we have a Player
model that has level
and levelName
attributes. We want to call levelUp()
to increment the level
and assign a new levelName
when the player reaches level 5.
You can follow along by generating your own model with ember generate model player
.
app/models/player.js
:
import Model, { attr } from '@ember-data/model';
export default class Player extends Model {
@attr('number', { defaultValue: 0 }) level;
@attr('string', { defaultValue: 'Noob' }) levelName;
levelUp() {
let newLevel = this.level++;
if (newLevel === 5) {
this.levelName = 'Professional';
}
}
}
Now let's create a test which will call levelUp
on the player when they are level
4 to assert that the levelName
changes. We will use module
together with the setupTest
helper method :
tests/unit/models/player-test.js
:
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import { run } from '@ember/runloop';
module('Unit | Model | player', function(hooks) {
setupTest(hooks);
// Specify the other units that are required for this test.
test('should increment level when told to', function(assert) {
const player = run(() =>
this.owner.lookup('service:store').createRecord('player')
);
// wrap asynchronous call in run loop
run(() => player.levelUp());
assert.equal(player.level, 5, 'level gets incremented');
assert.equal(
player.levelName,
'Professional',
'new level is called professional'
);
});
});​