Sinon模拟对象在顶层不包含原始对象的功能

时间:2013-06-14 01:00:01

标签: ember.js mocking qunit sinon

所以我试图测试这个函数用那些指定的参数调用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()函数。该set函数位于ctrl.object内,我收到以下错误:

TypeError: Object # has no method 'set'" error.

为什么?模拟对象不应该包含与原始对象相同的属性/功能吗?

1 个答案:

答案 0 :(得分:2)

而不是像这样使用模拟对象

loginInputFieldView.set("controller", mockController);

你应该使用原始对象

loginInputFieldView.set("controller", controller);