【发布时间】:2016-06-04 00:36:11
【问题描述】:
我有一个 mixin 可以帮助我完成工作流程中的步骤。基本上,它查看当前步骤是什么,然后基于此执行一些魔术。问题是函数的第一行抓取了this.controllerFor('document'),我不明白如何模拟controllerFor 调用。例如,我知道我可以在测试中将{testing: "123"} 传递给.create。这会给我this.get('testing'),但我如何模拟controllerFor?另外,需要明确的是,controllerFor 调用的唯一原因是我可以获得currentStep。
prepare-next.js
setNext: function() {
let currentStep = this.controllerFor('document').get('currentStep');
if (currentStep === 'First_step') {
//do something
} else {
//do something else...
}
// Bunch more stuff happens...
}
prepare-next-test.js
import Ember from 'ember';
import PrepareNext from 'my-app/mixins/prepare-next';
import { module, test } from 'qunit';
module('mixin:prepare-next');
const PrepareNextObject = Ember.Object.extend(PrepareNext);
let subject;
test('#setNext does all the things', function(assert) {
subject = PrepareNextObject.create();
subject.setNext();
//assert.equal(foo, bar);
});
【问题讨论】:
-
你想做出什么样的断言?如果您只是断言使用特定参数调用给定函数,则可以使用 sinon.js。否则,我发现验收测试是对这类事情更合适的测试级别。
标签: javascript unit-testing ember.js qunit ember-qunit