Skip to content

Commit ceee1d1

Browse files
committed
Clean up comments and implementations in lib/startup.test.ts
1 parent 6757632 commit ceee1d1

1 file changed

Lines changed: 7 additions & 52 deletions

File tree

lib/startup.test.ts

Lines changed: 7 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -18,36 +18,9 @@ afterAll(() => {
1818
vi.useRealTimers();
1919
});
2020

21-
// 各プラグインのテストで慣例的に行われているのと同様、実クライアント/実DBに
22-
// 接続する共有シングルトンをモック化する。これらは plugin.default(slack) /
23-
// plugin.server(slack) に渡す SlackMock とは独立しており、モックしても
24-
// Fastify登録クラスのクラッシュ検知という本テストの目的には影響しない。
25-
//
26-
// lib/discord.ts はガード無しでモジュール読み込み時に
27-
// discord.login(process.env.TSGBOT_DISCORD_TOKEN) を実行するため、
28-
// 実トークンが環境変数にあると本テストが実際にDiscordへログインしてしまう。
29-
// factory無しの automock はモック生成のために実モジュールを一度requireして
30-
// しまい副作用(実ログイン)を防げないため、実モジュールを読み込まない
31-
// factoryを明示的に渡す。
32-
vi.mock('./discord', () => {
33-
const emitter = new EventEmitter();
34-
const chainable: any = new Proxy(() => chainable, {
35-
get: () => chainable,
36-
});
37-
return {
38-
default: new Proxy(emitter, {
39-
get(target: any, prop, receiver) {
40-
if (prop === 'isReady') {
41-
return () => false;
42-
}
43-
if (prop in target || typeof prop === 'symbol') {
44-
return Reflect.get(target, prop, receiver);
45-
}
46-
return chainable;
47-
},
48-
}),
49-
};
50-
});
21+
vi.mock('./discord', () => ({
22+
default: new EventEmitter(),
23+
}));
5124
vi.mock('./slack', () => ({
5225
webClient: {},
5326
eventClient: {},
@@ -58,36 +31,21 @@ vi.mock('./slack', () => ({
5831
vi.mock('./openai');
5932
vi.mock('./firestore');
6033
vi.mock('./state');
61-
// lib/mailgun.ts はモジュール読み込み時に無条件で mailgun.client({username, key})
62-
// を実行するが、mailgun.js は username が無いと即座に例外を投げる。開発環境の
63-
// 実行時は .env 経由で値が入っているため気づきにくいが、CIのようにこれらの
64-
// 環境変数が未設定の環境では起動時クラッシュになるため、既存の
65-
// mail-hook/index.test.ts と同様にモックする。
6634
vi.mock('./mailgun', () => ({
6735
__esModule: true,
6836
default: {
6937
client: vi.fn(),
7038
},
7139
}));
72-
// hayaoshi/jantama等、複数のプラグインがGoogle Sheets連携にgoogleapisを使う。
73-
// 実認証情報が無くても内部で非同期の認証情報探索が走り、そのタイミング次第で
74-
// 無関係な後続テストの失敗として現れることを確認したため、まとめてモックする。
75-
vi.mock('googleapis');
40+
vi.mock('../achievements');
7641
// dajare/tokenize.js がモジュール読み込み時に無条件で lib/getReading.js の
7742
// getReading() を呼び出す。辞書ファイル(lib/bep-ss-2.3/bep-eng.dic)が
7843
// 存在しない環境(CI等)では http://www.argv.org から実際にtarballを
7944
// ダウンロードしようとして失敗する。lib/__mocks__/getReading.js の
8045
// 既存の手動モックを使うことでこれを防ぐ。
8146
vi.mock('../lib/getReading');
82-
vi.mock('../achievements');
83-
// slack-log は default() 内で無条件に slack-log API へ axios.get() する。
84-
// 共有axiosモック(空文字列応答)を使い、実ネットワーク接続の
85-
// ECONNREFUSEDによる失敗を防ぐ。
47+
vi.mock('googleapis');
8648
vi.mock('axios');
87-
88-
// autogen-quiz, city-symbol 等、一部のプラグインが誤って自モジュール内で
89-
// `import 'dotenv/config'` を実行しており、テスト中に .env の実際の
90-
// シークレットが process.env に読み込まれてしまう。多重の安全策として無効化する。
9149
vi.mock('dotenv/config', () => ({}));
9250

9351
const EXCLUDED_BOTS = new Set([
@@ -118,16 +76,13 @@ const EXCLUDED_BOTS = new Set([
11876

11977
const testedBots = allBots.filter((name) => !EXCLUDED_BOTS.has(name));
12078

121-
// PR #1215 (FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER) のように、実際に
122-
// fastify.register() するまで顕在化しない起動時クラッシュを検知するためのテスト。
123-
// SlackMock だけを使う通常のユニットテストはこのクラスの不具合を検知できない。
12479
describe.each(testedBots)('%s', (name) => {
12580
it('loads without throwing', async () => {
12681
const slack = new SlackMock();
12782
process.env.CHANNEL_SANDBOX = slack.fakeChannel;
12883
process.env.CHANNEL_GAMES = slack.fakeChannel;
129-
// nmpz はモジュール読み込み時に GOOGLE_MAPS_API_KEY / CLOUDINARY_URL の
130-
// 存在を無条件にチェックし、無ければ即座にthrowする。
84+
85+
// nmpz
13186
process.env.GOOGLE_MAPS_API_KEY ||= 'dummy-google-maps-api-key';
13287
process.env.CLOUDINARY_URL ||= 'cloudinary://dummy:dummy@dummy';
13388

0 commit comments

Comments
 (0)