使用Sinon.JS和Rewire时是否可以设置`this`的值?

时间:2016-03-01 09:33:46

标签: javascript unit-testing sinon

背景

如果我有以下模块:

Pre Change

并使用Rewire导入私有函数,然后使用Sinon.js对此函数进行单元测试:

this_module: {

    foo: {};

    set_this_foo: function () {

        this.foo.boo = 'something';
        return this.foo;
    }
}

我收到错误消息:

  

TypeError:无法设置属性' boo'未定义的

因为var set_this_foo = app.__get__('this_module.set_this_foo'); var spy = sinon.spy(set_this_foo); spy(); expect(spy).to.have.returned({boo: 'something'}); 最终拥有全局对象的值。我可以通过在运行测试之前定义名为this的全局变量来解决此问题,但不希望污染全局命名空间。

问题

是否有(优雅的)方式来定义与foo相关的this的值?

1 个答案:

答案 0 :(得分:1)

我会这样做有点不同:

spy

由于您也可以使用原始方法名称(仅$(document).ready();除外)引用间谍,因此调用它将确保在正确的上下文中调用它。