ember.js - Sinon 模拟对象不包含顶层原始对象的函数

标签 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() 函数。该设置函数位于 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/

相关文章:

ember.js - 你如何在emberjs中制作隐藏的文本字段?

c# - 如何通过 JavaScript 回调在 C# 中运行 QUnit 测试并返回测试结果?

ant - 为 QUnit + PhantomJS + Jenkins 创建 report.xml 文件时遇到问题

java - 如何仅模拟一种注入(inject)依赖项的一种方法并正常注入(inject)其余方法?

java - 单元测试 - 注入(inject)空模拟组件

javascript - 使用 Qunit 断言函数抛出异常

ember.js - Ember Mirage 未将模型作为 ember 对象传递

ember.js - Ember : deactivate not called when transitioning from one route to another

javascript - 使用 {{#if}} 帮助程序切换显示的 Ember js 动态操作

java - 如何模拟 Elasticsearch Java 客户端?