我正在尝试学习如何使用karma-jasmine为angular 2(打字稿文件)创建测试。我的疑问是,为了测试component.ts文件,我只能测试我在HTML文件中调用的方法,或者我可以测试所有的方法吗? 例如:我有这个模型文件modal.nota.component.ts
{{#data.item}}
<h2>{{name}}</h2>
{{/data.item}}
我不会调用方法&#39; setFalse&#39;在我的HTML文件中,但我想测试他。如何在我的spec文件中调用和测试该方法? modal.nota.spec.ts
import { Component, Input, Output, EventEmitter } from '@angular/core';
import { Nota } from './nota.model'
@Component({
moduleId: module.id,
selector: 'modal-nota',
templateUrl: 'modal.nota.component.html'
})
export class ModalNotaComponent {
test : boolean = true;
setFalse(test) {
this.test = false;
return test;
}
}
此测试不起作用。我收到了这个错误 photo of the errors
答案 0 :(得分:1)
经过一些搜索后,我发现如何从component.ts文件中调用方法和变量,(service,modal等)。您所要做的就是在测试中实例化该类。这是新的测试文件:
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { ModalNotaComponent } from '../modal.nota.component';
describe('Test of test variable', () => {
beforeEach(() => {
this.modalNota = new ModalNotaComponent();
});
it('Should show that the value of test variable is true', () => {
expect(this.modalNota.test).toBeTruthy()
});
it('Should test setFalse method', () => {
let r = null;
let t = true;
r = this.modalNota.setFalse(t);
expect(r).toBeFalsy()
});
});
致记:Live chat Developers Blog - Testing Angular 2 apps Part 2: Dependency Injection and Components
答案 1 :(得分:0)
在构建了一个新的Angular 2项目并稍稍摆弄它后,我能够让测试成功运行。以下是一些要检查的事项:
<强> 1。检查Zone.js版本
在初始脚手架之后,我会用你的代码运行测试,我得到一个奇怪的错误:
TypeError: Cannot set property 'stack' of undefined
然后我可以通过将zone.js从0.7.2升级到0.7.4来解决这个问题:
npm install --save zone.js@0.7.4
<强> 2。在“setFalse”方法中检查您的变量
编译正确后,我仍然收到错误,“预计错误为真”。看看你的setFalse方法:
setFalse(test) {
this.test = false;
return test;
}
请注意 test 和 this.test 是 NOT 引用相同的变量。当你说“this.test”时,它指的是在此函数上面声明的类级别变量测试。请记住,TypeScript与JavaScript的范围不同。
希望这会有所帮助。祝你好运!