【发布时间】:2018-01-13 15:50:00
【问题描述】:
查看Ember tutorial on testing models,它将incrementProperty 视为异步调用。为什么?
app/models/player.js
import Model from 'ember-data/model';
import { attr } from 'ember-data/model';
export default Model.extend({
level: attr('number', { defaultValue: 0 }),
levelName: attr('string', { defaultValue: 'Noob' }),
levelUp() {
let newLevel = this.incrementProperty('level');
if (newLevel === 5) {
this.set('levelName', 'Professional');
}
}
});
tests/unit/models/player-test.js
import { moduleForModel, test } from 'ember-qunit';
import { run } from "@ember/runloop";
moduleForModel('player', 'Unit | Model | player', {
// Specify the other units that are required for this test.
needs: []
});
test('should increment level when told to', function(assert) {
// this.subject aliases the createRecord method on the model
const player = this.subject({ level: 4 });
// wrap asynchronous call in run loop
run(() => player.levelUp());
assert.equal(player.get('level'), 5, 'level gets incremented');
assert.equal(player.get('levelName'), 'Professional', 'new level is called professional');
});
据我所知,code 似乎是同步的,但从测试中删除运行循环确实会产生错误并且测试失败:
错误:断言失败:您已打开测试模式,该模式 禁用运行循环的自动运行。您将需要包装任何代码 运行中的异步副作用
【问题讨论】:
标签: ember.js