我有一个 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);
});
最佳答案
您可以在测试之前或测试中替换controllerFor
方法:
import Ember from 'ember';
import PrepareNext from '../../../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) {
assert.expect(2);
subject = PrepareNextObject.create();
subject.controllerFor = () => {
assert.ok(true, 'controllerFor called');
return {
get() {
assert.ok(true, 'Get called');
return 'First_step';
}
}
};
subject.setNext();
//assert.equal(foo, bar);
});
关于javascript - 模拟 Controller 用于 qunit 测试。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37625231/