如何对javascript ES6类进行单元测试,这些类将自己的创建封装在一个静态函数中?
在Dan Schafer的React Europe talk()中,他展示了一种在GraphQL服务器中处理授权的方法,可以将授权委托给业务逻辑层,在该层中,每个业务对象类都有一个作为获取和授权的“单一真实来源”的类 他暗示这些类不能有公共构造函数,从而使gen()成为实例化其中一个类的唯一方法 作为一个C#dev,这不容易实现单元测试。也许,我对他的例子太过直截了当了 在ES2015中,是否可以使用此模式单独对业务逻辑进行单元测试?如果是,你能举个例子吗如何对javascript ES6类进行单元测试,这些类将自己的创建封装在一个静态函数中?,javascript,graphql,Javascript,Graphql,在Dan Schafer的React Europe talk()中,他展示了一种在GraphQL服务器中处理授权的方法,可以将授权委托给业务逻辑层,在该层中,每个业务对象类都有一个作为获取和授权的“单一真实来源”的类 他暗示这些类不能有公共构造函数,从而使gen()成为实例化其中一个类的唯一方法 作为一个C#dev,这不容易实现单元测试。也许,我对他的例子太过直截了当了 在ES2015中,是否可以使用此模式单独对业务逻辑进行单元测试?如果是,你能举个例子吗 这里有一个相关的问答,但它并没有完全
这里有一个相关的问答,但它并没有完全回答我的问题: 问:
答:我所采用的方法会因我尝试测试的内容而异:
- 如果我试图对我的授权逻辑本身进行单元测试,我几乎肯定会将该逻辑分解为如下内容:现在我只需完全独立地对
进行单元测试,传入一个伪checkCanSee
对象和伪数据查看器
- 如果我试图在这个类的一个实例方法中对逻辑进行单元测试;如果我们有
我想对这种逻辑进行单元测试,有几个选项。在ES6中,我不知道有什么简单的方法可以使构造函数真正私有,所以我可以在单元测试中直接用假数据调用构造函数。在另一种语言中,我希望能够公开一种只有单元测试才能看到的方法,这种方法可以让我用假数据构造一个新对象。第三个想法是提取出值得单元测试的逻辑:类TodoItem{ getItemSummary(){ 返回this.data.title+”(“+this.data.author.name+”); } }
现在我可以自己进行单元测试类TodoItem{ getItemSummary(){ 返回摘要(this.data.title,this.data.author.name); } } 功能总结(标题、名称){ 返回title+“(“+name+”); }
总结
- 如果我试图对整个类进行端到端测试(包括测试
函数),我最好有一种方法来设置Redis的一个带垫片的实例;一旦我用伪数据配置了垫片,我就可以运行真正的gen
并测试结果对象TodoItem.gen
- 如果我想对
的实现进行单元测试,我可能需要使用上面相同的Redis shim,同样地安装一个假的gen
,使用类似的方法;从那里,我可以监视对Redis和checkCanSee
的调用,以确保它们符合预期,并测试Redis返回数据/返回null或checkCanSee
返回true/false的各种情况checkCanSee
- 如果我想对使用
的代码进行单元测试(假设我们有一个函数TodoItem
,它将renderTodoItem
作为参数),我根本不会使用真正的TodoItem
实现,我将通过模拟TodoItem
,以确保我对TodoItem
的单元测试不会意外地依赖于rendertoitem
的实现细节李>TodoItem
希望这有帮助 谢谢你提供的信息。。。建议在内部和外部用户之间使用单一的数据获取真实性来源吗?鉴于两者具有不同的授权逻辑。。。可以看到不同的东西,进行不同的变异