打字稿中的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不在这里打电话。有人可以帮我解决我错了的地方
您应该使用Link Seams和proxyquire存根./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
---------------|---------|----------|---------|---------|-------------------