ささきしき

チラシ

VirtualBoxが「NtCreateFile(\Device\VBoxDrvStub) failed」で動かないとき【備忘】

主に Oracle VM VirtualBox をインストール・アップデートした直後に任意のイメージを起動しようとした際に NtCreateFile(\Device\VBoxDrvStub) failed といった感じのエラーダイアログが出て失敗するとき。 表示の通りドライバが死んでいるので、以下のようにして状況を確認・対処する。

1. ドライバがインストールされているか確認

powershell で以下を行う

> sc.exe query vboxsup

インストールされていれば概要が出て、されていなければ「存在しません」的な表示が出る

2.1 インストールされていないので、インストールする

以下からインストール設定ファイルを見つけ、コンテキストメニューからインストールする

C:\Program Files\Oracle\VirtualBox\drivers\vboxsup
※デフォルトインストール先

2.2 インストールされていた・したので起動する

powershell (管理者権限) を立ち上げ、以下を行う

> sc.exe start vboxsup

おわり

globalにexportした関数をjestでmockする【備忘】

ルー語か?(挨拶)

サンプルコードが胡乱なのは業務コード持ってきた誤魔化しがあるから勘弁してくれや。

マジな話すると以下のサイト見たらおわり

rinoguchi.net

tl;dr

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('ʕ •ᴥ•ʔ'); 
});

Refer to

モック関数 · Jest