【发布时间】:2020-09-11 22:04:23
【问题描述】:
当按下提交按钮时,我想测试 url 是否发生了变化。作为测试的一部分,我正在检查初始 url 是否为“/auth”并且该 url 变为“/”。
但是,初始 url 测试失败了。
测试:
it("displays an authcode and submit button", async() => {
history = createMemoryHistory();
const root = document.createElement('div');
document.body.appendChild(root);
render(
<MemoryRouter initialEntries={["/auth"]}>
<App />
</MemoryRouter>,
root
);
expect(screen.queryByTestId('bad-code-message').classList.contains('hidden')).toBe(true);
expect(screen.getByLabelText('Auth code:')).toBeVisible();
expect(screen.getByRole('button')).toBeVisible();
expect(location.pathname).toBe("/auth");
});
应用组件:
import React from "react";
import { Route } from "react-router-dom";
import { ProtectedRoute } from './ProtectedRoute';
import { CreateProfileWithRouter } from './CreateProfileComponent';
import { ActivityList } from './ActivityListComponent';
import { TokenEntryWithRouter } from './TokenEntryComponent';
export class App extends React.Component {
render() {
return (
<div>
<ProtectedRoute exact path="/" component={ActivityList} />
<Route path="/login" component={CreateProfileWithRouter} />
<Route path="/auth" component={TokenEntryWithRouter} />
</div>
);
}
}
结果:
expect(received).toBe(expected) // Object.is equality
Expected: "/auth"
Received: "/"
【问题讨论】:
-
MemoryRouter 不应该影响 location.pathname,这就是它的目的。
标签: reactjs testing react-router jestjs