TestConfig
Playwright Test 提供了许多选项来配置测试的收集和执行方式,例如 timeout 或 testDir。这些选项在配置文件中的 TestConfig 对象中进行描述。此类型描述了配置文件的格式,若要在运行时访问解析后的配置参数,请使用 FullConfig。
Playwright Test 支持同时运行多个测试项目。特定于项目的选项应放入 testConfig.projects,但顶级 TestConfig 也可以定义所有项目共享的基础选项。
import { defineConfig } from '@playwright/test';
export default defineConfig({
timeout: 30000,
globalTimeout: 600000,
reporter: 'list',
testDir: './tests',
});
属性
build
添加于:v1.35Playwright 转译器配置。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
build: {
external: ['**/*bundle.js'],
},
});
类型
captureGitInfo
添加于: v1.51这些设置控制是否捕获 git 信息并将其存储在配置 testConfig.metadata 中。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
captureGitInfo: { commit: true, diff: true }
});
类型
详情
- 当您希望在 HTML(或第三方)报告中查看
commit信息时,捕获该信息非常有用。 - 捕获
diff信息有助于通过实际的源码差异来丰富报告。此信息可用于提供有关如何修复测试的智能建议。
这些设置的默认值取决于环境。当测试作为 CI 的一部分运行(此时获取 git 信息是安全的)时,默认值为 true,否则为 false。
git 提交元数据的结构可能会发生变化。
expect
新增于: v1.10expect 断言库的配置。了解更多关于 各种超时 的信息。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
expect: {
timeout: 10000,
toMatchSnapshot: {
maxDiffPixels: 10,
},
},
});
类型
- Object
-
timeout数字 (可选)异步 expect 匹配器的默认超时(以毫秒为单位),默认为 5000ms。
-
toHaveScreenshotObject (可选)-
animations"allow" | "disabled" (可选)参见 page.screenshot() 中的 animations。默认为
"disabled"。 -
caret"hide" | "initial" (可选)参见 page.screenshot() 中的 caret。默认为
"hide"。 -
maxDiffPixelsnumber (可选)可接受的像素差异数量,默认未设置。
-
maxDiffPixelRationumber (可选)可接受的差异像素占总像素的比例,介于
0和1之间,默认未设置。 -
scale"css" | "device" (可选)参见 page.screenshot() 中的 scale。默认为
"css"。 -
stylePathstring | Array<string> (optional)参见 page.screenshot() 中的 style。
-
thresholdnumber (可选)相同像素在比较图像中可接受的感知颜色差异,范围从
0(严格)到1(宽松)。"pixelmatch"比较器以 YIQ 色彩空间计算颜色差异,并将threshold的默认值设为0.2。 -
pathTemplatestring (可选)控制截图位置的模板。详情请参见 testConfig.snapshotPathTemplate。
-
-
toMatchAriaSnapshotObject (可选)-
pathTemplatestring (可选)控制 aria 快照位置的模板。详情请参见 testConfig.snapshotPathTemplate。
-
children"contain" | "equal" | "deep-equal" (可选)控制快照根节点的子节点如何与实际可访问性树进行匹配。这相当于在每个 aria 快照模板的顶部添加一个
/children属性。单个快照可以通过包含明确的/children属性来覆盖此设置。
-
-
toMatchSnapshotObject (可选) -
toPassObject (可选)expect(value).toPass() 方法的配置。
-
failOnFlakyTests
添加于: v1.52如果任何测试被标记为不稳定(flaky),是否以错误退出。在 CI 上很有用。
也可以通过 命令行 的 --fail-on-flaky-tests 选项使用。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
failOnFlakyTests: !!process.env.CI,
});
类型
forbidOnly
新增于: v1.10如果任何测试或分组被标记为 test.only() 或 test.describe.only(),是否以错误退出。在 CI 上很有用。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
forbidOnly: !!process.env.CI,
});
类型
fullyParallel
新增于: v1.20Playwright Test 并行运行测试。为此,它会同时运行多个工作进程。默认情况下,测试文件是并行运行的。单个文件中的测试按顺序在相同的工作进程中运行。
您可以使用此选项配置整个测试运行,以并行执行所有文件中的所有测试。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
fullyParallel: true,
});
类型
globalSetup
新增于: v1.10全局设置文件的路径。此文件将在所有测试之前被引入并运行。它必须导出一个接收 FullConfig 参数的单个函数。传递路径数组以指定多个全局设置文件。
了解更多关于 全局设置和清理 的信息。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
globalSetup: './global-setup',
});
类型
globalTeardown
新增于: v1.10全局清理文件的路径。此文件将在所有测试完成后被引入并运行。它必须导出一个单个函数。另请参见 testConfig.globalSetup。传递路径数组以指定多个全局清理文件。
了解更多关于 全局设置和清理 的信息。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
globalTeardown: './global-teardown',
});
类型
globalTimeout
新增于: v1.10整个测试套件可以运行的最大时间(以毫秒为单位)。零超时(默认)会禁用此行为。在 CI 上很有用,可以防止损坏的设置运行过长时间并浪费资源。了解更多关于 各种超时 的信息。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
globalTimeout: process.env.CI ? 60 * 60 * 1000 : undefined,
});
类型
grep
新增于: v1.10过滤器,仅运行标题匹配其中一个模式的测试。例如,传递 grep: /cart/ 应仅运行标题中包含“cart”的测试。也可以通过 命令行 的 -g 选项使用。正则表达式将针对包含项目名称、测试文件名、test.describe 名称(如果有)、测试名称和以空格分隔的测试标签组成的字符串进行测试,例如 chromium my-test.spec.ts my-suite my-test。
grep 选项对于 标记测试 也很有用。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
grep: /smoke/,
});
类型
grepInvert
新增于: v1.10过滤器,仅运行标题不匹配其中一个模式的测试。这是 testConfig.grep 的反向操作。也可以通过 命令行 的 --grep-invert 选项使用。
grepInvert 选项对于 标记测试 也很有用。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
grepInvert: /manual/,
});
类型
ignoreSnapshots
新增于: v1.26是否跳过快照断言,例如 expect(value).toMatchSnapshot() 和 await expect(page).toHaveScreenshot()。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
ignoreSnapshots: !process.env.CI,
});
类型
maxFailures
新增于: v1.10整个测试套件运行的最大测试失败次数。达到此数字后,测试将停止并以错误退出。设置为零(默认)将禁用此行为。
也可以通过 命令行 的 --max-failures 和 -x 选项使用。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
maxFailures: process.env.CI ? 1 : 0,
});
类型
metadata
新增于: v1.10元数据包含要包含在报告中的键值对。例如,JSON 报告将包含序列化为 JSON 的元数据。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
metadata: { title: 'acceptance tests' },
});
类型
name
新增于: v1.10配置名称在报告和测试执行期间可见,除非被 testProject.name 覆盖。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
name: 'acceptance tests',
});
类型
outputDir
新增于: v1.10测试执行期间创建的文件的输出目录。默认为 <package.json-directory>/test-results。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
outputDir: './test-results',
});
类型
详情
此目录在开始时会被清理。运行测试时,会在 testConfig.outputDir 中创建一个唯一的子目录,确保并行运行的测试不会冲突。此目录可通过 testInfo.outputDir 和 testInfo.outputPath() 访问。
以下是一个使用 testInfo.outputPath() 创建临时文件的示例。
import { test, expect } from '@playwright/test';
import fs from 'fs';
test('example test', async ({}, testInfo) => {
const file = testInfo.outputPath('temporary-file.txt');
await fs.promises.writeFile(file, 'Put some data to the file', 'utf8');
});
preserveOutput
新增于: v1.10是否在 testConfig.outputDir 中保留测试输出。默认为 'always'。
'always'- 为所有测试保留输出;'never'- 不为任何测试保留输出;'failures-only'- 仅为失败的测试保留输出。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
preserveOutput: 'always',
});
类型
- "always" | "never" | "failures-only"
projects
新增于: v1.10Playwright Test 支持同时运行多个测试项目。有关更多信息,请参见 TestProject。
用法
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
projects: [
{ name: 'chromium', use: devices['Desktop Chrome'] }
]
});
类型
quiet
新增于: v1.10是否禁止来自测试的 stdio 和 stderr 输出。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
quiet: !!process.env.CI,
});
类型
repeatEach
新增于: v1.10重复每个测试的次数,对调试不稳定测试很有用。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
repeatEach: 3,
});
类型
reportSlowTests
新增于: v1.10是否报告缓慢的测试文件。传递 null 以禁用此功能。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
reportSlowTests: null,
});
类型
详情
耗时超过 threshold 毫秒的测试文件被视为缓慢,并将报告其中最慢的文件,数量不超过 max。将 max 设为零将报告所有超过阈值的测试文件。
reporter
新增于: v1.10要使用的报告器列表。每个报告器可以是
- 内置报告器名称,如
'list'或'json'。 - 模块名称,如
'my-awesome-reporter'。 - 报告器的相对路径,如
'./reporters/my-awesome-reporter.js'。
您可以以元组形式将选项传递给报告器,如 ['json', { outputFile: './report.json' }]。如果未指定该属性,Playwright 会在设置了 CI 环境变量时使用 'dot' 报告器,否则使用 'list' 报告器。
在 报告器指南 中了解更多信息。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: 'line',
});
类型
respectGitIgnore
新增于: v1.45搜索测试文件时是否跳过 .gitignore 中的条目。默认情况下,如果未明确指定 testConfig.testDir 和 testProject.testDir,Playwright 将忽略任何匹配 .gitignore 条目的测试文件。
用法
testConfig.respectGitIgnore
类型
retries
新增于: v1.10给予失败测试的最大重试次数。默认情况下,失败的测试不会重试。了解更多关于 测试重试 的信息。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
retries: 2,
});
类型
shard
新增于: v1.10对测试进行分片并仅执行选定的分片。以基于 1 的形式指定,例如 { total: 5, current: 2 }。
了解更多关于 Playwright Test 的 并行与分片。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
shard: { total: 10, current: 3 },
});
类型
snapshotPathTemplate
新增于: v1.28此选项配置一个模板,用于控制由 expect(page).toHaveScreenshot()、expect(locator).toMatchAriaSnapshot() 和 expect(value).toMatchSnapshot() 生成的快照的位置。
您可以在 testConfig.expect 中分别为每个断言配置模板。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
testDir: './tests',
// Single template for all assertions
snapshotPathTemplate: '{testDir}/__screenshots__/{testFilePath}/{arg}{ext}',
// Assertion-specific templates
expect: {
toHaveScreenshot: {
pathTemplate: '{testDir}/__screenshots__{/projectName}/{testFilePath}/{arg}{ext}',
},
toMatchAriaSnapshot: {
pathTemplate: '{testDir}/__snapshots__/{testFilePath}/{arg}{ext}',
},
},
});
类型
详情
该值可能包含一些在测试执行期间会被替换为实际值的“标记”。
考虑以下文件结构
playwright.config.ts
tests/
└── page/
└── page-click.spec.ts
以及使用 toHaveScreenshot() 调用的 page-click.spec.ts
import { test, expect } from '@playwright/test';
test.describe('suite', () => {
test('test should work', async ({ page }) => {
await expect(page).toHaveScreenshot(['foo', 'bar', 'baz.png']);
});
});
支持的标记列表
{arg}- 不带扩展名的相对快照路径。这来自传递给toHaveScreenshot()、toMatchAriaSnapshot()或toMatchSnapshot()的参数;如果调用时没有参数,这将是自动生成的快照名称。- 值:
foo/bar/baz
- 值:
{ext}- 快照扩展名(带有前导点)。- 值:
.png
- 值:
{platform}-process.platform的值。{projectName}- 项目的文件系统净化名称(如果有)。- 值:
''(空字符串)。
- 值:
{snapshotDir}- 项目的 testProject.snapshotDir。- 值:
/home/playwright/tests(由于配置中未提供snapshotDir,默认为testDir)
- 值:
{testDir}- 项目的 testProject.testDir。- 值:
/home/playwright/tests(绝对路径,因为testDir是相对于配置文件所在的目录解析的)
- 值:
{testFileDir}- 从testDir到测试文件的相对路径中的目录。- 值:
page
- 值:
{testFileName}- 带有扩展名的测试文件名。- 值:
page-click.spec.ts
- 值:
{testFilePath}- 从testDir到测试文件的相对路径。- 值:
page/page-click.spec.ts
- 值:
{testName}- 经过文件系统净化后的测试标题,包括父级的 describe,但不包括文件名。- 值:
suite-test-should-work
- 值:
每个标记前面都可以有一个字符,该字符将仅在此标记具有非空值时使用。
考虑以下配置
import { defineConfig } from '@playwright/test';
export default defineConfig({
snapshotPathTemplate: '__screenshots__{/projectName}/{testFilePath}/{arg}{ext}',
testMatch: 'example.spec.ts',
projects: [
{ use: { browserName: 'firefox' } },
{ name: 'chromium', use: { browserName: 'chromium' } },
],
});
在此配置中
- 第一个项目没有名称,因此其快照将存储在
<configDir>/__screenshots__/example.spec.ts/...中。 - 第二个项目有名称,因此其快照将存储在
<configDir>/__screenshots__/chromium/example.spec.ts/..中。 - 由于
snapshotPathTemplate解析为相对路径,因此它将相对于configDir进行解析。 - 正斜杠
"/"在任何平台上都可以用作路径分隔符。
tag
Added in: v1.57报告中每个测试前添加的标签。对于标记测试运行以区分 CI 环境 很有用。
请注意,每个标签必须以 @ 符号开头。了解更多关于 标记 的信息。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
tag: process.env.CI_ENVIRONMENT_NAME, // for example "@APIv2"
});
类型
testDir
新增于: v1.10将递归扫描测试文件的目录。默认为配置文件的目录。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
testDir: './tests/playwright',
});
类型
testIgnore
新增于: v1.10匹配这些模式之一的文件不会作为测试文件执行。匹配是针对绝对文件路径进行的。字符串被视为 glob 模式。
例如,'**/test-assets/**' 将忽略 test-assets 目录中的任何文件。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
testIgnore: '**/test-assets/**',
});
类型
testMatch
新增于: v1.10仅匹配这些模式之一的文件才会作为测试文件执行。匹配是针对绝对文件路径进行的。字符串被视为 glob 模式。
默认情况下,Playwright 寻找匹配以下 glob 模式的文件:**/*.@(spec|test).?(c|m)[jt]s?(x)。这意味着后缀为 ".test" 或 ".spec" 的 JavaScript 或 TypeScript 文件,例如 login-screen.wrong-credentials.spec.ts。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
testMatch: /.*\.e2e\.js/,
});
类型
timeout
新增于: v1.10每个测试的超时时间(以毫秒为单位)。默认为 30 秒。
这是所有测试的基础超时。此外,每个测试可以使用 test.setTimeout() 配置自己的超时。了解更多关于 各种超时 的信息。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
timeout: 5 * 60 * 1000,
});
类型
tsconfig
新增于: v1.49适用于所有导入文件的单个 tsconfig 的路径。默认情况下,每个导入文件的 tsconfig 是单独查找的。请注意,当加载配置文件或其任何依赖项时,tsconfig 属性不起作用。当指定 --tsconfig 命令行选项时,此配置将被忽略。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
tsconfig: './tsconfig.test.json',
});
类型
updateSnapshots
新增于: v1.10是否使用测试运行产生的实际结果来更新预期的快照。默认为 'missing'。
'all'- 所有执行的测试都将更新快照。'changed'- 所有执行的测试都将更新不匹配的快照。匹配的快照将不会更新。也会创建缺失的快照。'missing'- 创建缺失的快照,例如在编写新测试并第一次运行时。这是默认设置。'none'- 不更新任何快照。
了解更多关于 快照 的信息。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
updateSnapshots: 'missing',
});
类型
- "all" | "changed" | "missing" | "none"
updateSourceMethod
新增于: v1.50定义如何在源代码中更新快照。
'patch'- 创建一个统一的 diff 文件,稍后可用于更新源代码。这是默认设置。'3way'- 在源代码中生成合并冲突标记。这允许用户手动选择相关更改,就像在 IDE 中解决合并冲突一样。'overwrite'- 用新的快照值覆盖源代码。
用法
testConfig.updateSourceMethod
类型
- "overwrite" | "3way" | "patch"
use
新增于: v1.10所有测试的全局选项,例如 testOptions.browserName。了解更多关于 配置 的信息,并查看 可用选项。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: {
browserName: 'chromium',
},
});
类型
webServer
新增于: v1.10在测试期间启动开发 Web 服务器(或多个)。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
webServer: {
command: 'npm run start',
url: 'https://:3000',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
},
use: {
baseURL: 'https://:3000/',
},
});
现在,您可以在导航页面时使用相对路径
import { test } from '@playwright/test';
test('test', async ({ page }) => {
// This will result in https://:3000/foo
await page.goto('/foo');
});
可以启动多个 Web 服务器(或后台进程)
import { defineConfig } from '@playwright/test';
export default defineConfig({
webServer: [
{
command: 'npm run start',
url: 'https://:3000',
name: 'Frontend',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
},
{
command: 'npm run backend',
url: 'https://:3333',
name: 'Backend',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
}
],
use: {
baseURL: 'https://:3000',
},
});
如果您的 Web 服务器在不同的端口上运行,请使用 wait 来捕获端口
import { defineConfig } from '@playwright/test';
export default defineConfig({
webServer: {
command: 'npm run start',
wait: {
stdout: /Listening on port (?<my_server_port>\d+)/
},
},
});
import { test, expect } from '@playwright/test';
test.use({ baseUrl: `https://:${process.env.MY_SERVER_PORT ?? 3000}` });
test('homepage', async ({ page }) => {
await page.goto('/');
});
类型
- Object | Array<Object>
-
commandstring要启动的 Shell 命令。例如
npm run start。 -
cwdstring (可选)所生成进程的当前工作目录,默认为配置文件的目录。
-
envObject<string, string> (可选)为命令设置的环境变量,默认为
process.env。 -
gracefulShutdownObject (可选)-
signal"SIGINT" | "SIGTERM" -
timeoutnumber
如何关闭进程。如果未指定,进程组将被强制
SIGKILL。如果设置为{ signal: 'SIGTERM', timeout: 500 },进程组将接收到SIGTERM信号,如果在 500 毫秒内未退出,则随后发送SIGKILL。您也可以使用SIGINT作为信号。超时为0意味着不会发送SIGKILL。Windows 不支持SIGTERM和SIGINT信号,因此在 Windows 上忽略此选项。请注意,关闭 Docker 容器需要SIGTERM。 -
-
ignoreHTTPSErrorsboolean (可选)获取
url时是否忽略 HTTPS 错误。默认为false。 -
name字符串 (可选)为 Web 服务器指定自定义名称。此名称将作为日志消息的前缀。默认为
[WebServer]。 -
portnumber (可选)预期 HTTP 服务器出现的端口。它会等到端口接受连接。应指定
port或url。 -
reuseExistingServerboolean (可选)如果为 true,当可用时,它将重用
port或url上的现有服务器。如果port或url上没有运行服务器,它将运行命令启动一个新服务器。如果为false,则如果现有进程正在监听该port或url,它将抛出错误。这通常应设置为!process.env.CI,以便在本地运行测试时允许使用本地开发服务器。 -
stderr"pipe" | "ignore" (可选)是否将命令的 stderr 通过管道传输到进程 stderr 或忽略它。默认为
"pipe"。 -
stdout"pipe" | "ignore" (可选)如果是
"pipe",它会将命令的 stdout 通过管道传输到进程 stdout。如果是"ignore",它将忽略命令的 stdout。默认为"ignore"。 -
waitObject (可选)-
stdoutRegExp (可选)要在命令输出的
stdout中等待的正则表达式。命名捕获组存储在环境中,例如/Listening on port (?<my_server_port>\d+)/将端口号存储在process.env['MY_SERVER_PORT']中。 -
stderrRegExp (可选)要在命令输出的
stderr中等待的正则表达式。命名捕获组存储在环境中,例如/Listening on port (?<my_server_port>\d+)/将端口号存储在process.env['MY_SERVER_PORT']中。
仅当产生了给定的输出时,才考虑命令已启动。
-
-
timeout数字 (可选)等待进程启动并可用所需的时间(以毫秒为单位)。默认为 60000。
-
urlstring (可选)HTTP 服务器上预期在准备好接受连接时返回 2xx、3xx、400、401、402 或 403 状态码的 URL。重定向(3xx 状态码)会被跟踪,并检查新位置。应指定
port或url。
-
详情
如果指定了端口,Playwright Test 将在运行测试之前等待它在 127.0.0.1 或 ::1 上可用。如果指定了 URL,Playwright Test 将在运行测试之前等待 URL 返回 2xx、3xx、400、401、402 或 403 状态码。
对于持续集成,您可能需要使用 reuseExistingServer: !process.env.CI 选项,该选项在 CI 上不会使用现有服务器。要查看 stdout,您可以设置 DEBUG=pw:webserver 环境变量。
port(而非 url)作为 testOptions.baseURL 传递给 Playwright。例如,端口 8080 产生的 baseURL 等于 https://:8080。如果 webServer 指定为数组,则必须显式配置 baseURL(即使它只有一个条目)。
还建议在配置中指定 testOptions.baseURL,以便测试可以使用相对 URL。
workers
新增于: v1.10用于并行化测试的最大并发工作进程数。也可以设置为逻辑 CPU 核心的百分比,例如 '50%'。
Playwright Test 使用工作进程来运行测试。始终至少有一个工作进程,但可以使用更多工作进程来加速测试执行。
默认为逻辑 CPU 核心数的一半。了解更多关于 Playwright Test 的 并行与分片。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
workers: 3,
});
类型
已弃用
snapshotDir
新增于: v1.10使用 testConfig.snapshotPathTemplate 配置快照路径。
相对于配置文件创建的 toMatchSnapshot 快照文件的基础目录。默认为 testConfig.testDir。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
snapshotDir: './snapshots',
});
类型
详情
每个测试的目录可以通过 testInfo.snapshotDir 和 testInfo.snapshotPath() 访问。
此路径将作为每个测试文件快照目录的基础目录。将 snapshotDir 设置为 'snapshots',testInfo.snapshotDir 将解析为 snapshots/a.spec.js-snapshots。