问题
I'm trying to write a test that checks for the existence of a route using Jasmine for Angular application:
import { routes } from './app-routing.module';
import { UsersComponent } from './users/users.component';
describe('routes', () => {
it('should contain route for /users', () => {
const expectedRoute = { path: 'users', component: UsersComponent };
expect(routes).toContain(expectedRoute);
});
});
but the test fails (probably because of object equality in Javascript How object equality checks work in Javascript?)
How to modify the test to make it work?
回答1:
I have tried it, and it works fine with your code.
There's no problem with equality in the method toContain.
Have you changed const routes to export const routes in your app-routing.module.ts, and import { routes } from './app-routing.module' in your test?
It's the only thing that I had to change in order to test the app.
I have done the following steps:
ng new test-routing(saying yes to routing so theapp-routing.module.tsis created.- Modified
app.component.spec.tswith the following code:
import { TestBed, async } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
import { routes } from './app-routing.module';
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule
],
declarations: [
AppComponent
],
}).compileComponents();
}));
it('should contain route for /principal', () => {
const expectedRoute = { path: 'principal', component: AppComponent };
expect(routes).toContain(expectedRoute);
});
});
- Modified the
app-routing.module.tsto add this routes:
export const routes: Routes = [
{ path: '', redirectTo: '/principal', pathMatch: 'full' },
{ path: 'principal', component: AppComponent }
];
- Run
ng test
The test is fine.
If I change the 'principal' path to other, the test fails.
If I revert to the good one, the test goes ok.
来源:https://stackoverflow.com/questions/59535910/how-to-test-the-existence-of-a-route-in-angular-using-jasmine