Files
KQL ce6aa207e9 fix: 修复图片路径以适配GitHub Pages base path
- 将所有图片路径从绝对路径改为使用 process.env.PUBLIC_URL
- 修复 HomePage.tsx 中所有图片引用
- 修复 CoursePage.tsx 中所有图片引用
- 确保图片在 GitHub Pages 上正确加载

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 09:24:45 +08:00

2.1 KiB

Avoid using a callback in asynchronous tests and hooks (no-done-callback)

When calling asynchronous code in hooks and tests, jest needs to know when the asynchronous work is complete to progress the current run.

Originally the most common pattern to achieve this was to use callbacks:

test('the data is peanut butter', done => {
  function callback(data) {
    try {
      expect(data).toBe('peanut butter');
      done();
    } catch (error) {
      done(error);
    }
  }

  fetchData(callback);
});

This can be very error-prone however, as it requires careful understanding of how assertions work in tests or otherwise tests won't behave as expected.

For example, if the try/catch was left out of the above code, the test would time out rather than fail. Even with the try/catch, forgetting to pass the caught error to done will result in jest believing the test has passed.

A more straightforward way to handle asynchronous code is to use Promises:

test('the data is peanut butter', () => {
  return fetchData().then(data => {
    expect(data).toBe('peanut butter');
  });
});

When a test or hook returns a promise, jest waits for that promise to resolve, as well as automatically failing should the promise reject.

If your environment supports async/await, this becomes even simpler:

test('the data is peanut butter', async () => {
  const data = await fetchData();
  expect(data).toBe('peanut butter');
});

Rule details

This rule checks the function parameter of hooks & tests for use of the done argument, suggesting you return a promise instead.

The following patterns are considered warnings:

beforeEach(done => {
  // ...
});

test('myFunction()', done => {
  // ...
});

test('myFunction()', function (done) {
  // ...
});

The following patterns are not considered warnings:

beforeEach(async () => {
  await setupUsTheBomb();
});

test('myFunction()', () => {
  expect(myFunction()).toBeTruthy();
});

test('myFunction()', () => {
  return new Promise(done => {
    expect(myFunction()).toBeTruthy();
    done();
  });
});