Snap.swift 0.3.0

Snap.swift 0.3.0

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2018年1月
SPM支持 SPM

Oscar Antonio Duran Grillo 维护。



Snap.swift - 快速的 snapshot 测试🎨

Twitter: @skyweb07 License

Snap.swift 是一个用于方便视图 UI 测试的 snapshot 测试库。

🤖要求

  • iOS 9.0+
  • Xcode 9.0+
  • Swift / Objective-C

🚀入门

🎨为什么要测试 UI?

您想确保每次触摸任何 UI 元素时,一切都能保持原样,这种类型的集成测试可以帮助您实现像素完美的视图,并通过在拉取请求中提供设计参考图像来使您的设计师更加满意。

⚡️它是如何工作的?

通过生成一个参考图像并将其存储在您的代码库中,然后比较每个新测试用例与 参考图像 以检查是否存在差异。如果测试发现任何差异,它将在测试用例中添加一个附件,您将能够查看发生了什么更改

Project attachment

🛠配置

为了配置 snapshot 测试文件夹,我们需要向项目添加一个名为 SNAP_REFERENCE_IMAGE_PATH 的新环境变量,其值为 $(SOURCE_ROOT)/$(PROJECT_NAME)Tests/,以便 Snap.swift 可以找到存储参考图像的文件夹。如果配置正确设置,项目应如下所示

Project attachment

错误的图像和比较图像存储在 $PATH/Snap/Failed$PATH/Snap/Diff 中,如果您愿意,可以将这些路径添加到 .gitignore 中,因为这些路径对于 Snap.swift 的工作不是必需的。

🎯安装

Snap.swift 通过 CocoaPods 提供。要安装
它,只需将以下行添加到您的 Podfile

pod 'Snap.swift'

创建我们的第一个测试

  1. 我们首先需要记录我们的参考图像,为了这样做,我们首先需要进入我们的测试类,并将 isRecording 变量设置为 true,这样库就知道我们正在记录模式,并可以提取 参考图像

Swift

import XCTest
import Snap_swift

class SnapTests: XCTestCase {
  
  override func setUp() {
    super.setUp()
    isRecording = true
  }

  func test_box_with_text_aligned_to_center() {
    let view = BoxWithTextAlignedToCenterView()
    
    expect(view).toMatchSnapshot()
  }
}

Objective-c

@import XCTest;
#import <Snap_swift/Snap_swift-swift.h>
#import <Snap_swift/Snap.h>

@interface SnapTests : XCTestCase
@end

@implementation SnapTests

- (void)setUp {
  [super setUp];
  self.isRecording = YES;
}

- (void)test_box_with_text_aligned_to_center {

  UIView *view = [BoxWithTextAlignedToCenterView new];
  
  verifyView(view);
}

@end

在执行我们的测试套件之后,如果一切正常,我们应该看到所有的测试失败的警告,如下所示

⚠️ Test ran in record mode, reference image has been saved to $SNAP_REFERENCE_IMAGE_PATH/testcase.png, now remove `isRecording` in order to perform the snapshot comparison.

这是正常的,这意味着我们的参考图像已保存,我们可以在 参考图像 目录中检查它们,我们应该将这些通常添加到 git 中,以便我们可以与之比较。

⚠️警告

请记住,在生成参考图像后移除 isRecording 标志,否则您将无法进行图像比较

☑ TODO

  • 为项目添加测试
  • 制作设备无关的截图

📝注意

至今天,您可以对 UIViewCALayer 类进行断言。

本项目高度受到Facebook开源库FBSnapshotTestCase的启发,看起来他们已经归档了这个库,所以我创立了这个项目以继续推进这个项目和移动端快照测试

😬贡献

  • 此处提交一个issue
  • 通过提交PR添加建议或修复issues
  • 通过Twitter发消息给我

⚖ 许可协议

MIT License

Copyright (c) 2017-Present Oscar Antonio Duran Grillo

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.