由于不同的类索引,使用 Styled-Components 的快照测试在 CI 管道中失败

Posted

技术标签:

【中文标题】由于不同的类索引,使用 Styled-Components 的快照测试在 CI 管道中失败【英文标题】:Snapshot tests with Styled-Components fail in the CI pipeline due to different class index 【发布时间】:2020-02-02 14:32:32 【问题描述】:

我正在使用react-testing-libraryjest-styled-components 进行快照测试。它以前一直运行良好,但现在许多组件的快照测试在 CI 管道 (Gitlab) 中失败,只是因为 jest-styled-components 生成的散列类名占位符中的索引不同:

   - Snapshot
+ Received

@@ -1,19 +1,19 @@
- .c4 
+ .c3 
    font-size: 14px;
    height: 14px;
    min-height: 14px;
    min-width: 14px;
    width: 14px;
  

- .c4 > svg 
+ .c3 > svg 
    fill: currentColor;
    pointer-events: none;
  

- .c4 > svg * 
+ .c3 > svg * 
    height: 100%;
    width: 100%;
  

  .c2 .ant-calendar-picker-input.ant-input 
@@ -26,15 +26,15 @@

  .c0 
    position: relative;
  

- .c3 
+ .c4 
    color: #00293a;
  

- .c1 .c3 
+ .c1 .c4 
    color: #00293a;
  

  <div>
    <div
@@ -49,11 +49,11 @@
            placeholder="Select date"
            readonly=""
            value=""
          />
          <div
-           class="ant-calendar-picker-icon c3 c4"
+           class="c3 c4 ant-calendar-picker-icon"
            data-testid="icon_arrowDown"
            size="14"
          >
            <file-mock />
          </div>

  21 |   it('renders correctly', () => 
  22 |     const  container  = renderWithProps()
> 23 |     expect(container).toMatchSnapshot()
     |                       ^
  24 |   )
  25 | )
  26 | 

在本地运行测试时,没有问题。

有人知道出了什么问题吗?

【问题讨论】:

对于样式化的组件,较小的版本更改可能会导致快照中使用的类索引发生更改。确保 package.json 文件中的版本号是恒定的。如果您需要灵活地使用修补程序,那么我建议对您的软件包版本使用tilde (~) 而不是caret(^)。要了解有关版本控制的更多信息,请参阅:***.com/a/22345808/3609255 【参考方案1】:

确保在本地使用相同版本的包并在 CI 中解决了这个问题。

删除 node_modules 并运行与 CI 中相同的安装命令后,在本地运行测试会更改快照。我更新了快照,提交并推送了更改,管道成功运行。

【讨论】:

以上是关于由于不同的类索引,使用 Styled-Components 的快照测试在 CI 管道中失败的主要内容,如果未能解决你的问题,请参考以下文章

聚类不同的类

使用列表将数据网格绑定到两个不同的类?

如何在相同大小的类中给出不同的约束(xcode 8 AutoLayout)

记录以将文件与在不同进程中运行的类实例分开

访问 TObjectList 线程的不同索引是不是安全?

如何在 Svelte 的类属性中使用反应函数?