Ton*_*y D 4 javascript graphql
在Dan Schafer的React Europe演讲(https://youtu.be/etax3aEe2dA?t=11m5s)中,他展示了一种在GraphQL服务器中处理授权的方法可以委托给业务逻辑层,其中每个业务对象类都有一个gen ()函数充当“单一来源”为两个取和授权。
他暗示这些类可能没有公共构造函数,从而使gen()成为实例化这些类之一的唯一方法。
作为C#开发人员,这将无法[轻松]进行单元测试。也许,我从字面上看还是以他为榜样。
在ES2015中,是否可以使用这种模式对业务逻辑进行单元测试?如果可以,请提供一个例子吗?
这是相关的问答,但并不能完全解决我的问题:
小智 5
我要采用的方法会因我要测试的内容而异:
如果我要对授权逻辑本身进行单元测试,则几乎可以肯定地将这个逻辑分解为以下形式:
现在,我将checkCanSee完全自己进行单元测试,传入一个伪造的Viewer对象和伪造的数据。
如果我要对此类的一种实例方法中的逻辑进行单元测试;例如,如果我们有,
class TodoItem {
getItemSummary() {
return this.data.title + "(" + this.data.author.name + ")";
}
}
而我想对该逻辑进行单元测试,则有几种选择。在ES6中,我不知道有一种简单的方法可以使构造函数真正私有,因此我可以在单元测试中直接使用伪数据直接调用构造函数。用另一种语言,我希望能够公开一种仅在单元测试中可见的方法,该方法使我可以使用伪数据构造一个新对象。第三个想法是提取值得进行单元测试的逻辑:
class TodoItem {
getItemSummary() {
return summarize(this.data.title, this.data.author.name);
}
}
function summarize(title, name) {
return title + "(" + name + ")";
}
现在我可以summarize自己进行单元测试了。
如果我想对整个类进行端到端测试(包括测试gen功能),那么理想情况下,我将有一种方法来设置带垫片的Redis实例;一旦用伪造数据配置了填充片,就可以运行真实填充TodoItem.gen并测试生成的对象。
如果我想对的实现进行单元测试gen,则可能需要使用上面相同的Redis垫片,并类似地checkCanSee使用https://facebook.github.io/jest/docs/manual- mocks.html ; 从那里,我可以监视对Redis的调用并checkCanSee确保它们符合预期,并测试Redis返回数据/返回null或checkCanSee返回true / false 的各种情况。
TodoItem(例如我们有一个renderTodoItem以a TodoItem作为参数的函数),那么我根本就不会使用实际的TodoItem实现,我会通过一个模拟TodoItem来确保对renderTodoItem不会偶然依赖的实现细节TodoItem。希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
747 次 |
| 最近记录: |