我目前在单元测试中的Angular(14(浅层渲染快照上面临一个奇怪的行为。
有时我的快照测试会失败,这取决于我是单独运行还是作为捆绑包运行。失败的原因是__ngContext__={[Function Number]}
和__ngContext__="0"
之间的差异。
除此之外,我使用的是";"玩笑预设角度"ng mocks";用于以模拟的方式提供模块,以仅呈现浅DOM快照。
有人知道如何从mock渲染中删除__ngContext__
,以避免在独立或捆绑运行测试时出现差异吗。
我的测试如下:
import { MockBuilder, MockRender } from 'ng-mocks';
describe('Snapshot Tests', () => {
beforeEach(() =>
MockBuilder(MyComponent, [
MyModule
])
);
it('should create', () => {
const fixture = MockRender(MyComponent, {});
expect(fixture).toMatchSnapshot();
});
});
// Jest Snapshot v1
exports[`MyComponent Snapshot Tests should create`] = `
<mock-render
__ngContext__={[Function Number]}
>
<my-component>
<h1>Test</h1>
</my-component>
</mock-render>
有时(如果我单独运行测试(
// Jest Snapshot v1
exports[`MyComponent Snapshot Tests should create`] = `
<mock-render
__ngContext__="0"
>
<my-component>
<h1>Test</h1>
</my-component>
</mock-render>
包裹信息
> npx envinfo --npmPackages
@angular/core: ^14.0.2 => 14.0.2
ng-mocks: ^14.0.1 => 14.0.1
jest: ^28.1.1 => 28.1.1
jest-preset-angular: ^12.1.0 => 12.1.0
ts-jest: ^28.0.5 => 28.0.5
...
它看起来像Angular或jest中的一个bug。
ngContext
是满足角度需求的内部属性。它可以是一个索引(数字(或一个对象。添加数字支持是为了提高性能并减少不同节点上相同上下文的对象数量。
上下文的索引从0开始,看起来Angular或jest中都有代码,它将0视为false
,将1+视为true
。如果为true,则存在从基元到其类型的对象的转换。
这就是为什么套件中的第一个测试具有__ngContext__="0"
,而所有其他测试(1+(都具有__ngContext__={[Function Number]}
正确的方法是向相关框架报告问题以解决它。但这可能需要相当长的时间,尤其是开玩笑。
这就是我在ng-mocks
中实现永久修复的原因:https://github.com/help-me-mom/ng-mocks/pull/3830,将于今天发布。