首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当多个扩展匹配器具有相同名称时进行处理

当多个扩展匹配器具有相同名称时进行处理
EN

Stack Overflow用户
提问于 2020-09-24 16:19:46
回答 1查看 91关注 0票数 1

我使用来自两个外部库jest-dom/extend-expectjest-extended的自定义匹配器。这两个库都定义了一个名为toBeEmpty的匹配器,但具有不同的行为。一个期望string/array/object/iterable为空,另一个期望DOM元素为空。

我的感觉是jest配置中的顺序会影响测试中实际使用的匹配器:

代码语言:javascript
复制
    setupFilesAfterEnv: [
        '@testing-library/jest-dom/extend-expect',
        'jest-extended',
    ],
代码语言:javascript
复制
    setupFilesAfterEnv: [
        'jest-extended',
        '@testing-library/jest-dom/extend-expect',
    ],

对于第一个配置,jest-extended版本优先,而对于第二个配置,jest-dom版本优先。这是正确的吗?

有没有办法同时使用两个匹配器?库作者是否应该检测到已经存在另一个匹配器并对其进行处理?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-24 17:17:15

expect.extend将matcher合并到matcher对象中,同名的matcher会在没有通知的情况下被替换,这就是a known problem

防止名称冲突的一种方法是为匹配器提供名称空间,并在setupFilesAfterEnv中指定的Jest设置文件中设置它们。匹配器函数可以直接从匹配器库中导入并提供给expect.extend

@testing-library/jest-dom提供了导入匹配器的公共入口点:

代码语言:javascript
复制
const domMatchers = require('@testing-library/jest-dom/matchers');
const namespacedDomMatchers = Object.fromEntries(
  Object.entries(domMatchers).map(([name, matcher]) => [`dom_${name}`, matcher])
);

expect.extend(namespacedDomMatchers);

jest-extended有内部模块,也可以导入:

代码语言:javascript
复制
const extendedMatchers = require('jest-extended/dist/matchers');
const namespacedExtendedMatchers = Object.fromEntries(
  Object.entries(extendedMatchers).map(([name, matcher]) => [`extended_${name}`, matcher])
);

expect.extend(namespacedExtendedMatchers);

两个库中的匹配器都以dom_toBeEmptyextended_toBeEmpty的形式提供。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64042280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档