admin管理员组文章数量:1415673
I want to test that on click of link, modal should open.
I have written following test in spec.ts file
describe('NavbarComponent', () => {
let p: NavbarComponent;
let fixture: ComponentFixture<NavbarComponent>;
let de: DebugElement;
let el: HTMLElement;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [
NavbarComponent
],
imports: [ ng2Bootstrap.Ng2BootstrapModule.forRoot() ]
});
fixture = TestBed.createComponent(NavbarComponent);
p = fixtureponentInstance;
de = fixture.debugElement.query(By.css('nav'));
el = de.nativeElement;
});
it('signin should open modal', fakeAsync(() => {
var signin = <HTMLElement>el.getElementsByClassName("signin-link")[0];
signin.click();
tick();
var temp =<HTMLElement>el.getElementsByClassName("signinmodal")[0];
expect(["block"]).toContain(temp.style.display);
}));
I am using fakeasync and tick() as shown in the angular2 test guide
But the above test always fails as Expected [ 'block' ] to contain ''.
Here is the template code
<li><a href="#" class="signin-link" (click)="signinmodal.show()" data-toggle="modal" data-target=".signinmodal">Signin</a></li>
<div class="modal signinmodal" bsModal #signinmodal="bs-modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-body">
...
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div>
Edit
I also tried using their click simulator,as described in their test guide
The click() helper function is not one of the Angular testing utilities. It's a function defined in this guide's sample code. All of the sample tests use it. If you like it, add it to your own collection of helpers.
export const ButtonClickEvents = {
left: { button: 0 },
right: { button: 2 }
};
export function click(el: DebugElement | HTMLElement, eventObj: any = ButtonClickEvents.left): void {
if (el instanceof HTMLElement) {
el.click();
} else {
el.triggerEventHandler('click', eventObj);
}
}
and then calling click(signin)
instead of signin.click()
. But still the test failed.
I want to test that on click of link, modal should open.
I have written following test in spec.ts file
describe('NavbarComponent', () => {
let p: NavbarComponent;
let fixture: ComponentFixture<NavbarComponent>;
let de: DebugElement;
let el: HTMLElement;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [
NavbarComponent
],
imports: [ ng2Bootstrap.Ng2BootstrapModule.forRoot() ]
});
fixture = TestBed.createComponent(NavbarComponent);
p = fixture.ponentInstance;
de = fixture.debugElement.query(By.css('nav'));
el = de.nativeElement;
});
it('signin should open modal', fakeAsync(() => {
var signin = <HTMLElement>el.getElementsByClassName("signin-link")[0];
signin.click();
tick();
var temp =<HTMLElement>el.getElementsByClassName("signinmodal")[0];
expect(["block"]).toContain(temp.style.display);
}));
I am using fakeasync and tick() as shown in the angular2 test guide
But the above test always fails as Expected [ 'block' ] to contain ''.
Here is the template code
<li><a href="#" class="signin-link" (click)="signinmodal.show()" data-toggle="modal" data-target=".signinmodal">Signin</a></li>
<div class="modal signinmodal" bsModal #signinmodal="bs-modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-body">
...
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div>
Edit
I also tried using their click simulator,as described in their test guide
The click() helper function is not one of the Angular testing utilities. It's a function defined in this guide's sample code. All of the sample tests use it. If you like it, add it to your own collection of helpers.
export const ButtonClickEvents = {
left: { button: 0 },
right: { button: 2 }
};
export function click(el: DebugElement | HTMLElement, eventObj: any = ButtonClickEvents.left): void {
if (el instanceof HTMLElement) {
el.click();
} else {
el.triggerEventHandler('click', eventObj);
}
}
and then calling click(signin)
instead of signin.click()
. But still the test failed.
-
In the test guide, they call
fixture.detectChanges();
– Aluan Haddad Commented May 14, 2017 at 3:30 - I had tried calling it before and after tick, but somehow the test always fails. – Santosh Commented May 14, 2017 at 3:31
1 Answer
Reset to default 3Update: I've taken a minimum working example of ng2-bootstrap and tried to test it using jasmine unit tests, and I don't think it's going to be possible. The unit tests run inside a cut-down browser window without access to the full style sheet, external dependencies (like bootstrap) etc. These tests are designed to test the logic of your ponent, rather than the rendering and display of a template.
If you want to test this level of ui interaction, you're best of putting it in an E2E test and then using protractor. Then you will have an entire, runnable browser instance and there ng2-bootstrap should work as expected.
https://github./angular/angular-cli/wiki/e2e
Initial answer:
Sorry to ask a potentially dumb question, but isn't your expect the wrong way round? Shouldn't it be:
expect(temp.style.display).toContain("block");
Although that probably won't resolve the issue, it's important to note that expect
should operate on the item under test, and in certain scenarios (I'm not sure if this is one of them) can be responsible for resolving promises.
To troubleshoot the actual problem, maybe you should first verify that the click of the sign-in modal is working and that you're actually finding all of the elements on the page. It can sometimes occur that no errors are thrown, but the element isn't found.
本文标签: javascriptAngular 2 and karmajasmine unit test case to open modal on click of linkStack Overflow
版权声明:本文标题:javascript - Angular 2 and karma-jasmine unit test case to open modal on click of link - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745204640a2647579.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论