代码之家  ›  专栏  ›  技术社区  ›  Cazs

在React onChange中测试功能组件

  •  0
  • Cazs  · 技术社区  · 2 年前

    我正在测试一个功能组件。目标是评估值是否正确变化。

    我只进行了测试,检查了它的性能。但我找不到办法把道具传给他

    输入密码

    export default function InputPassword({ password, SetPassword }: any) {
      return (
        <input
          type="password"
          placeholder="password"
          value={password ?? ''}
          onChange={(event) => SetPassword(event.target.value)}
        />
      );
    }
    

    测试:

    test('Login InputPassword', () => {
      render(<InputPassword />);
      const username_input = screen.queryByPlaceholderText(/password/i);
    });
    

    更新最终代码

    test('Login InputPassword', async () => {
      const fakePass = '123';
      const fakeCb = jest.fn();
      render(<InputPassword password={fakePass} SetPassword={fakeCb} />);
      const usernameInput = screen.queryByPlaceholderText(/password/i);
      expect(usernameInput).toHaveValue(fakePass);
      fireEvent.change(usernameInput, { target: { value: '000' } });
      expect(fakeCb).toHaveBeenCalled();
    });
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Som Shekhar Mukherjee    2 年前

    里面 render 你可以像在其他地方传递道具一样,向组件传递道具。

    test('Login InputPassword', () => {
      render(<InputPassword password="123" />);
      const username_input = screen.queryByPlaceholderText(/password/i);
    });
    

    根据您的评论:

    test("Login InputPassword", async () => {
      const fakePass = "123";
      const fakeCb = jest.fn();
      render(<InputPassword password={fakePass} setPassword={fakeCb} />);
      const usernameInput = screen.queryByPlaceholderText(/password/i);
      expect(usernameInput).toHaveValue(fakePass);
      await userEvent.type(username_input, "changed");
      expect(usernameInput).toHaveValue("changed");
      expect(fakeCb).toHaveBeenCalledTimes(7);
    });
    

    安装时,输入显示通过道具提供给它的密码。然后,在用户提供一个新密码后,相应地调用处理程序,并更新输入值。