打字稿存根中的Sinon

问题描述 投票:0回答:1

打字稿中的Sinon无法正确导入子模块..请找到以下代码下面的代码是文件parent.ts

import submodule from './sub-module'
class Parent {

/**
 * name
 */
public parentmethod() {
   let sub = new submodule();
   let result = sub.submethod();
   return result;
}

}

export default Parent

和名为submodule.ts的子模块代码

class submodule{
public submethod(){

    return "hai submodule"
}

}
export default submodule

和下面的单元测试脚本

"use strict";
import chai from 'chai';
import sinon from "sinon";
import submodule from '../src/sub-module'
import  parentmodule from '../src/app'
const expect = chai.expect;
describe("test",function(){
    let stub;
    beforeEach(() => {        
       // stub = sinon.stub(sub ,'saveuser');
     });
    it("test methods",function(){
        stub= sinon.createStubInstance(submodule);
        let parentObj = new parentmodule();
        const user =  parentObj.parentmethod(); 
        expect(stub.submethod.calledOnce).to.be.true;
    })

})

结果显示期望的false为true。表示submethod不在这里打电话。有人可以帮我解决我错了的地方

typescript unit-testing sinon stub
1个回答
0
投票

您应该使用Link Seamsproxyquire存根./sub-module模块。

例如

parent.ts

import Submodule from './sub-module';

class Parent {
  public parentmethod() {
    let sub = new Submodule();
    let result = sub.submethod();
    return result;
  }
}

export default Parent;

sub-module.ts

class Submodule {
  public submethod() {
    return 'hai submodule';
  }
}
export default Submodule;

parent.test.ts

import { expect } from 'chai';
import sinon from 'sinon';
import proxyquire from 'proxyquire';

describe('61798668', () => {
  it('should pass', () => {
    const submoduleStub = {
      submethod: sinon.stub().returns('stubbed data'),
    };
    const SubmoduleStub = sinon.stub().returns(submoduleStub);
    const Parent = proxyquire('./parent', {
      './sub-module': {
        default: SubmoduleStub,
      },
    }).default;
    const parent = new Parent();
    const actual = parent.parentmethod();
    expect(actual).to.be.eq('stubbed data');
    sinon.assert.calledOnce(SubmoduleStub);
    sinon.assert.calledOnce(submoduleStub.submethod);
  });
});

带有覆盖率报告的单元测试结果:

  61798668
    ✓ should pass (2797ms)


  1 passing (3s)

---------------|---------|----------|---------|---------|-------------------
File           | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
---------------|---------|----------|---------|---------|-------------------
All files      |   85.71 |      100 |      50 |   85.71 |                   
 parent.ts     |     100 |      100 |     100 |     100 |                   
 sub-module.ts |      50 |      100 |       0 |      50 | 3                 
---------------|---------|----------|---------|---------|-------------------
© www.soinside.com 2019 - 2024. All rights reserved.