小编JS_*_*Dev的帖子

单元测试中存根(stub)、间谍(spy)、假冒(fake)和模拟(mock)的简单定义

我对单元测试很陌生。我已经阅读了这里并进行了一些谷歌搜索,但对这四种含义中的每一种含义仍然有点困惑。我发现以下定义有帮助......

存根 - 存根是接口或基类的最小实现

间谍 - 间谍将记录哪些成员被调用

假的 - 更复杂,假的可能类似于生产实现

模拟 - 模拟通常由模拟库动态创建,根据其配置,模拟可以表现得像虚拟机、存根或间谍

不过,我想简化一下含义(如果可能的话)并问几个问题。

  1. 以上所有内容是否仅与函数相关,或者它们可以是对象或任何其他类型吗?
  2. 存根- 存根本质上是一种提供虚拟信息而不是调用实际数据库的方法吗?例如,如果我有一个 API 调用,而不是实际调用 API,我只是向一个 JSON 文件发出 GET 请求,该文件位于我的测试文件夹中,其中包含一些虚拟数据,然后使用该文件而不是进行 API 调用?
  3. Spy - 这是一种跟踪函数发生情况的方法。这意味着当它被调用时你会跟随它,它会被传递到哪里?
  4. 假的- 例如,这是您在测试文件中创建的函数,用于模仿真实函数还是实际函数的简化版本?

提前致谢。

unit-testing

12
推荐指数
2
解决办法
6761
查看次数

在一个功能分支上进行许多传统的壮举类型提交

我已被添加到一个存储库,该存储库使用来自动提升 NPM 包的版本。该存储库使用常规提交规范,并且自述文件非常有限。

如果我要创建一个feature/ABC-123包含新功能的分支,这是否意味着我所做的每个提交都应该具有以下提交结构,feat: my message related to this commit或者我应该只有 1 个feat提交,其余的chore或其他类型不会提高存储库的版本?

或者我不需要担心这个问题,因为分支是这样的feature/ABC-123,因此知道将包提高 1 个次要版本,因为它位于功能文件夹中?

希望以上内容有意义,但如果没有的话,这里是一个提交历史记录示例:

feat: add product card basic layout
feat: add title to product card
test: add unit tests to product card
feat: add image to product card
chore: update breakpoints for card
test: add more unit tests
Run Code Online (Sandbox Code Playgroud)

上面的示例是否会像我使用过 3 次那样将 NPM 包提高 3 个次要版本feat,或者仅提高 1 个次要版本?或者这并不重要,唯一重要的是压缩提交并确保feat: added …

git npm semantic-release conventional-commits

6
推荐指数
1
解决办法
2159
查看次数

GraphQL 在突变时返回 null

我正在使用 GraphQL 连接到多个 RESTful 端点。我正在编写一个更改来更新用户详细信息,但是 GraphiQL 显示以下响应为 null 而不是更新的用户 ID 和名称...

{
  "data": {
    "updateUser": null
  }
}
Run Code Online (Sandbox Code Playgroud)
  updateUser: (parent, args) => {
    const { id, name } = args;
    return fetch(`${url}/users/${id}`, {
      method: 'PUT',
      body: JSON.stringify({ id, name }),
      headers: { 'Content-Type': 'application/json' },
    })
      .then(res => res.json())
      .then(json => console.log(json));
  },
Run Code Online (Sandbox Code Playgroud)

提前致谢。

javascript rest graphql

5
推荐指数
1
解决办法
1435
查看次数

JavaScript 按 X 号沿数组中的所有项目移动

我想创建一个接受 2 个参数的函数,第一个参数是一个数组,第二个参数是移动所有数组项的索引位置数。

因此,例如,如果我通过 exampleFunc([1,2,3,4,5], 2) 它应该将所有项目向右移动 2 个位置,因此返回 [4,5,1,2,3]。我已经完成了以下操作,但是有没有更雄辩/有效的方法来做到这一点?另外,如果我想反转方向并将其压缩为 1 个函数而不是如下所示的两个函数,除了在每个函数的不同部分放置条件之外,还有什么建议吗?尝试使用 .splice() 方法,但并没有真正到任何地方。任何帮助将不胜感激!

const moveArrayPositionRight = (array, movePositions) => {
  let newArray = new Array(array.length);

  for (i = 0; i < array.length; i++) {
    let newIndex = i - movePositions;

    if (newIndex < 0) {
      newIndex += array.length;
    }

    newArray[i] = array[newIndex];
  }

  return newArray;
};

console.log(moveArrayPositionRight([2, 4, 6, 8, 10], 2)); // output: [8, 10, 2, 4, 6]
Run Code Online (Sandbox Code Playgroud)

const moveArrayPositionLeft = (array, movePositions) => {
  let newArray = …
Run Code Online (Sandbox Code Playgroud)

javascript arrays

3
推荐指数
1
解决办法
48
查看次数

React:即使没有状态,我可以/应该使用自定义钩子而不是 HOC 吗?

我有一个现有的应用程序,它在 React 中使用高阶组件。我认为你可以通过使用渲染道具来继续/改进 HOC,但是现在有了 React 自定义挂钩,我认为这可能是最好的方法。

在阅读 React 文档时,所有自定义钩子示例都在其示例中使用状态。我可以/应该使用自定义钩子来替换未使用状态的 HOC 吗?如果是这样,有人可以给我举个例子吗?

reactjs react-hooks

2
推荐指数
1
解决办法
300
查看次数