gpt4 book ai didi

使用 @Input() 进行 Angular2 单元测试

转载 作者:太空狗 更新时间:2023-10-29 16:46:45 25 4
gpt4 key购买 nike

我有一个在实例变量上使用 @Input() 注释的组件,我正在尝试为 openProductPage() 编写单元测试方法,但我对如何设置单元测试有点迷茫。我可以公开该实例变量,但我认为我不必诉诸于此。

如何设置我的 Jasmine 测试以便注入(inject)模拟产品(提供?)并且我可以测试 openProductPage() 方法?

我的组件:

import {Component, Input} from "angular2/core";
import {Router} from "angular2/router";

import {Product} from "../models/Product";

@Component({
selector: "product-thumbnail",
templateUrl: "app/components/product-thumbnail/product-thumbnail.html"
})

export class ProductThumbnail {
@Input() private product: Product;


constructor(private router: Router) {
}

public openProductPage() {
let id: string = this.product.id;
this.router.navigate([“ProductPage”, {id: id}]);
}
}

最佳答案

这是来自官方文档https://angular.io/docs/ts/latest/guide/testing.html#!#component-fixture .因此,您可以创建新的输入对象 expectedHero 并将其传递给组件 comp.hero = expectedHero

还要确保最后调用 fixture.detectChanges();,否则属性将不会绑定(bind)到组件。

工作示例

// async beforeEach
beforeEach( async(() => {
TestBed.configureTestingModule({
declarations: [ DashboardHeroComponent ],
})
.compileComponents(); // compile template and css
}));

// synchronous beforeEach
beforeEach(() => {
fixture = TestBed.createComponent(DashboardHeroComponent);
comp = fixture.componentInstance;
heroEl = fixture.debugElement.query(By.css('.hero')); // find hero element

// pretend that it was wired to something that supplied a hero
expectedHero = new Hero(42, 'Test Name');
comp.hero = expectedHero;
fixture.detectChanges(); // trigger initial data binding
});

关于使用 @Input() 进行 Angular2 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36654834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com