所以我试图测试这个函数是否使用这些指定的参数调用 ctrl.set。
didInsertElement: function() {
$(".poptop").popover({placement: 'top',trigger: 'hover'});
var ctrl = this.get('controller');
ctrl.set('capsSet', false);
return;
我的 QUnit 测试如下所示:
QUnit.test("Let's blah", function() {
var controller = App.LoginIndexController.create();
var mockController = sinon.mock(controller);
mockController.expects("set").once().callsArgWith(2, 'capsSet', false);
loginInputFieldView.set("controller", mockController);
loginInputFieldView.didInsertElement();
mockController.verify();
});
一旦调用 this.get('controller')
,它就会返回我在测试中设置的模拟对象。不幸的是,模拟对象在顶层不包含 set()
函数。该设置函数位于 ctrl.object 内,我收到以下错误:
TypeError: Object # has no method 'set'" error.
这是为什么呢?模拟对象不应该包含与原始对象完全相同的属性/函数吗?
最佳答案
而不是像这样使用模拟对象
loginInputFieldView.set("controller", mockController);
你应该使用原始对象
loginInputFieldView.set("controller", controller);
关于ember.js - Sinon 模拟对象不包含顶层原始对象的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17099580/