如何对javascript ES6类进行单元测试,这些类将自己的创建封装在一个静态函数中?

如何对javascript ES6类进行单元测试,这些类将自己的创建封装在一个静态函数中?,javascript,graphql,Javascript,Graphql,在Dan Schafer的React Europe talk()中,他展示了一种在GraphQL服务器中处理授权的方法,可以将授权委托给业务逻辑层,在该层中,每个业务对象类都有一个作为获取和授权的“单一真实来源”的类 他暗示这些类不能有公共构造函数,从而使gen()成为实例化其中一个类的唯一方法 作为一个C#dev,这不容易实现单元测试。也许,我对他的例子太过直截了当了 在ES2015中,是否可以使用此模式单独对业务逻辑进行单元测试?如果是,你能举个例子吗 这里有一个相关的问答,但它并没有完全

在Dan Schafer的React Europe talk()中,他展示了一种在GraphQL服务器中处理授权的方法,可以将授权委托给业务逻辑层,在该层中,每个业务对象类都有一个作为获取和授权的“单一真实来源”的类

他暗示这些类不能有公共构造函数,从而使gen()成为实例化其中一个类的唯一方法

作为一个C#dev,这不容易实现单元测试。也许,我对他的例子太过直截了当了

在ES2015中,是否可以使用此模式单独对业务逻辑进行单元测试?如果是,你能举个例子吗


这里有一个相关的问答,但它并没有完全回答我的问题:

问:


答:

我所采用的方法会因我尝试测试的内容而异:

  • 如果我试图对我的授权逻辑本身进行单元测试,我几乎肯定会将该逻辑分解为如下内容:现在我只需完全独立地对
    checkCanSee
    进行单元测试,传入一个伪
    查看器
    对象和伪数据

  • 如果我试图在这个类的一个实例方法中对逻辑进行单元测试;如果我们有
    
    类TodoItem{
    getItemSummary(){
    返回this.data.title+”(“+this.data.author.name+”);
    }
    }
    
    我想对这种逻辑进行单元测试,有几个选项。在ES6中,我不知道有什么简单的方法可以使构造函数真正私有,所以我可以在单元测试中直接用假数据调用构造函数。在另一种语言中,我希望能够公开一种只有单元测试才能看到的方法,这种方法可以让我用假数据构造一个新对象。第三个想法是提取出值得单元测试的逻辑:
    
    类TodoItem{
    getItemSummary(){
    返回摘要(this.data.title,this.data.author.name);
    }
    }
    功能总结(标题、名称){
    返回title+“(“+name+”);
    }
    
    现在我可以自己进行单元测试
    总结

  • 如果我试图对整个类进行端到端测试(包括测试
    gen
    函数),我最好有一种方法来设置Redis的一个带垫片的实例;一旦我用伪数据配置了垫片,我就可以运行真正的
    TodoItem.gen
    并测试结果对象

  • 如果我想对
    gen
    的实现进行单元测试,我可能需要使用上面相同的Redis shim,同样地安装一个假的
    checkCanSee
    ,使用类似的方法;从那里,我可以监视对Redis和
    checkCanSee
    的调用,以确保它们符合预期,并测试Redis返回数据/返回null或
    checkCanSee
    返回true/false的各种情况

  • 如果我想对使用
    TodoItem
    的代码进行单元测试(假设我们有一个函数
    renderTodoItem
    ,它将
    TodoItem
    作为参数),我根本不会使用真正的
    TodoItem
    实现,我将通过模拟
    TodoItem
    ,以确保我对
    rendertoitem
    的单元测试不会意外地依赖于
    TodoItem
    的实现细节

希望这有帮助

谢谢你提供的信息。。。建议在内部和外部用户之间使用单一的数据获取真实性来源吗?鉴于两者具有不同的授权逻辑。。。可以看到不同的东西,进行不同的变异