大佬教程收集整理的这篇文章主要介绍了Typescript / Node.js – 如何模拟传递依赖关系进行集成测试?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用Supertest创建@L_674_2@集成测试来测试该路由:
@H_450_9@test -> my Express app -> controller -> service -> repository -> data source
我的问题是我需要模拟存储库/数据源,来运行测试!我想硬编码一些值,好像它们来自真实的数据源.我有什么选择?
在Java世界中,我将使用Spring或Guice的依赖注入,我会用这样的模拟版本替换存储库.在Typescript / Node.js世界中实现这种模拟的模式是什么?
我想使用普通的Javascript我可以使用Proxyquire及其@L_197_4@功能,从测试本身模拟存储库.但我不确定这适用于Typescript.
@H_450_9@// dependency.ts export function foo(){ return 'foo'; } // app.ts import {foo} from './dependency'; export default function main(){ return 'winner ' + foo(); }
您可以通过以下方式测试app.ts将其与sinon的依赖关系:
@H_450_9@import * as Dependency from '../src/dependency'; import main from '../src/app'; describe('test dependency',() => { var foostub; beforeEach(() => { foostub = sinon.stub(Dependency,'foo'); foostub.returns('la la lang'); }); afterEach(()=>{ foostub.restore(); }) it('uses stubbed dependency',()=>{ expect(main()).to.be.equal('winner la la lang'); }); it('can return different values on other tests',()=>{ foostub.returns('moonlight'); expect(main()).to.be.equal('winner moonlight'); }); });
因此,基本上对于集成测试,您可以在启动应用程序之前导入和存根依赖项.我这样做了@L_674_2@app.proxy.ts文件:
>在app.proxy中导入存储库并将其存根以返回预定义数据.设置存根后,导入真正的app.ts并导出它.>在集成测试文件中,导入app.proxy而不是app,并将其与supertest一起使用.这将最终为您提供应用程序,但在设置了存根依赖项之后!>编写并运行测试,知道它将使用预定义的数据
以上是大佬教程为你收集整理的Typescript / Node.js – 如何模拟传递依赖关系进行集成测试?全部内容,希望文章能够帮你解决Typescript / Node.js – 如何模拟传递依赖关系进行集成测试?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。