我有一个导入chart.js/auto并创建饼图的组件。组件和文件运行正常,当我运行spec.ts文件时,我得到TypeError:auto_1.default不是新图表行上的构造函数。
chart.js 3.9.1
jest-canvas-mock 2.4.0
ng-mocks 14.2.3
从我的文件摘录(这工作):
import Chart from 'chart.js/auto'
.
.
.
myChart: Chart;
createChart(){
this.myChart = new Chart(this.ctx, this.config);
}
spec.ts文件摘录:
.
.
.
import Chart from 'chart.js/auto';
describe('myComponent', () => {
let component: myComponent;
let fixture ComponentFixture<myComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [myComponent, MockComponent(otherComponent)],
imports: [myModules],
providers: [Utilities, Services]
}).compileComponents();
fixture = TestBed.createComponent(myComponent);
component.fixture.componentInstance;
fixture.detectChanges();
}));
describe('createChart()', () => {
it('should exist', () => {
component.createChart();
expect(component.createChart).toBeCalled();
}
})
}
MyComponent > createChart() > should exist
TypeError: auto_1.default is not a constructor
this.myChart = new Chart(this.ctx, this.config);
^
为什么文件可以正常工作,图表可以正确创建和使用,但Jest不将其视为构造函数?
1条答案
按热度按时间l2osamch1#
我也遇到了同样的问题,我只是通过嘲笑进口来解决它。我对测试chart.js不感兴趣,所以我认为使用mock对象没有任何问题。
我在
chart-stub.ts
文件中创建了一个mock对象,如下所示:然后在你的jest.config.ts中,你可以像这样交换它:
再运行一次。Jest将自动为您的mock类交换任何示例,并能够使用它创建一个新对象。