sinon.stub(myClass.prototype,'method')。returns()中的引用类实例

时间:2020-03-24 20:09:54

标签: javascript sinon stub

如何在存根中引用类实例?

例如,如果我有以下课程:

class myClass {
    x=11;
    myMethod(){return this.x.toString()}
}

我想在myClass的所有将来实例中对myMethod进行存根,但是让该方法仍返回该类的当前实例。我不能简单地执行以下操作:

sinon.stub(myClass.prototype,'myMethod').returns(this.x.toString());

因为this没有引用该类的当前实例。

编辑:更新了示例,以便myMethod处理this返回其他内容,而不仅仅是直接返回this

1 个答案:

答案 0 :(得分:0)

应为stub.returnsThis();。例如

index.ts

export class MyClass {
  myMethod() {
    return this;
  }
}

index.test.ts

import { MyClass } from './';
import sinon from 'sinon';
import { expect } from 'chai';

describe('60838564', () => {
  it('should return instance', () => {
    sinon.stub(MyClass.prototype, 'myMethod').returnsThis();
    const myClass = new MyClass();
    const actual = myClass.myMethod();
    expect(actual).to.be.instanceOf(MyClass);
    expect(actual).to.be.equal(myClass);
  });
});

单元测试结果:

  60838564
    ✓ should return instance


  1 passing (12ms)