このエントリはmstdn.maud.io Advent Calendar 2022の9日目枠の投稿です。 前日の8日目枠は柊野徹也(xnuꝿɐℲ)さんの投稿、 後日の10日目枠はkb10uyさんの投稿でした。 なんで未来の投稿にリンク貼れるんやろなぁ…(素知らぬ顔)
ということでVの話です。
続きを読むこのエントリはmstdn.maud.io Advent Calendar 2022の9日目枠の投稿です。 前日の8日目枠は柊野徹也(xnuꝿɐℲ)さんの投稿、 後日の10日目枠はkb10uyさんの投稿でした。 なんで未来の投稿にリンク貼れるんやろなぁ…(素知らぬ顔)
ということでVの話です。
続きを読む主に Oracle VM VirtualBox をインストール・アップデートした直後に任意のイメージを起動しようとした際に NtCreateFile(\Device\VBoxDrvStub) failed
といった感じのエラーダイアログが出て失敗するとき。
表示の通りドライバが死んでいるので、以下のようにして状況を確認・対処する。
powershell で以下を行う
> sc.exe query vboxsup
インストールされていれば概要が出て、されていなければ「存在しません」的な表示が出る
以下からインストール設定ファイルを見つけ、コンテキストメニューからインストールする
C:\Program Files\Oracle\VirtualBox\drivers\vboxsup ※デフォルトインストール先
powershell (管理者権限) を立ち上げ、以下を行う
> sc.exe start vboxsup
おわり
ルー語か?(挨拶)
サンプルコードが胡乱なのは業務コード持ってきた誤魔化しがあるから勘弁してくれや。
マジな話すると以下のサイト見たらおわり
import * as moduleName from '/path/to/module'; jest.spyOn(moduleName, 'functionName').mockReturnValue();
グローバル名前空間にエクスポートした関数(以下の例での prepareFn()
)をjest空間でモックして使いたいとき、テストファイルになんと書くべきか問題。
// prepareFn.js /** * 実際にはfetchで外部データを取り回したり、 * なにがしかの複雑な中間処理があったりする想定 */ export async function prepareFn (ctx) { return ctx.cond ? await doType1(ctx) : false; } async function doType1 (ctx) { // operation }
// somethingDo.js /** * prepareFn()の実行成否を前提とした関数のテストがしたいので、 * そこだけモックに包めると助かる */ export async function somethingDo (ctx) { const cond = await prepareFn(ctx); cond && doHoge(); }
これに対してテストファイルでモック化したい場合、最も手っ取り早い方法はファイルトップで jest.mock('/path/to/prepareFn.js');
としてしまうものだが、この方法ではファイル内の全テストに対してモックが当たってしまう。
望まれるのは「テスト記述(test()
, it()
)内で個別にモック化できる記法」だが、以下のように書くと良い。
// somethingDo.test.js import * as prepareFn from '/path/to/prepareFn'; import { somethingDo } from '/path/to/somethingDo'; // 引数の型が合ってないのは適当に書いたからなので許してヒヤシンス test('somethingDoテスト prepareFnモックしない', async () => { somethingDo('ʕ •ᴥ•ʔ'); }); test('somethingDoテスト prepareFn成功', async () => { jest .spyOn(prepareFn, 'prepareFn') .mockReturnValue(Promise.resolve(/*piyo*/)); somethingDo('ʕ •ᴥ•ʔ'); }); test('somethingDoテスト prepareFn失敗', async () => { jest .spyOn(prepareFn, 'prepareFn') .mockReturnValue(Promise.reject(false)); somethingDo('ʕ •ᴥ•ʔ'); });