您可以通过调用来对这样的任务进行单元测试someTask.perform()
。对于给定的任务,您可以存根您需要的内容以彻底测试它:
test('update project task sets the project title and calls save', function(assert) {
const model = {
project: {
set: this.spy(),
save: this.spy()
}
};
const growl = {
success: this.spy()
};
// using new syntax
const controller = this.owner.factoryFor('controller:someController').create({ model, growl, newTitle: 'someTitle' });
controller.updateProject.perform();
assert.ok(model.project.set.calledWith('someTitle'), 'set project title');
assert.ok(growl.success.calledWith('success'), 'called growl.success()');
});
这是使用sinon和ember-sinon-qunit的间谍从测试上下文访问 sinon,但这些对于单元测试不是必需的。您可以使用断言而不是间谍来存根模型和服务等:
const model = {
project: {
set: (title) => {
assert.equal(title, 'someTitle', 'set project title');
},
save: () => {
assert.ok(1, 'saved project');
}
}
};
要测试捕获,您可以从存根model.project.save()
方法中抛出:
const model = {
project: {
...
save: () => throw new Error("go to catch!")
}
};