SalesforceTrailhead,トラブルシューティング

(2022-06-27 19:23)現在のTrailheadワイヤサービスの Jest テストの記述 単元 | Salesforce TrailheadのApexワイヤーアダプターのサンプルコードには誤りがある。

//wireApex.test.js
import getAccountList from '@salesforce/apex/AccountController.getAccountList';

//テスト内で、下記のemit()を実行
getAccountList.emit(mockGetAccountList);//→「getAccountList.emit()は未定義(「TypeError: getAccountList.emit is not a function」)」と怒られる。

jest.mock()を使って、明示的にモックを作成するApexメソッドを指定しないといけない。

import getAccountList from '@salesforce/apex/AccountController.getAccountList';

jest.mock(
  '@salesforce/apex/AccountController.getAccountList',
  ()=>{
    const { createApexTestWireAdapter } = require("@salesforce/sfdx-lwc-jest");
    return {
      default: createApexTestWireAdapter(jest.fn()),
    };
  },
  {virtual: true}
);

//テスト内で、下記のemit()を実行
getAccountList.emit(mockGetAccountList);//→成功

また、ググると「registerApexTestWireAdapter」も出てくるが、これはすでに非推奨になっている。Trailheadは2世代ぐらい古いっぽい。

【参考】

lwc jest – registerApexTestWireAdapter is deprecated when working through trailhead Lightning Web Components Tests – Salesforce Stack Exchange
feat: createWireAdapterMock instead of register by jodarove · Pull Request #36 · salesforce/wire-service-jest-util · GitHub
lwc-recipes/apexWireMethodToProperty.test.js at main · trailheadapps/lwc-recipes · GitHub

BlenderBlender 2.91,トラブルシューティング

最近blenderをいじっています。
初心者なので、まずはdonuts tutorial(ドーナツチュートリアル)から始めているのですが、途中でモデリング時にオブジェクト表示が乱れるという現象が発生してしまいました。ファイルを開き直してもPCを再起動しても治らず、試行錯誤してやっと原因がわかったのでメモしようと思います。

現象

3D ViewportでSolidモード時、オブジェクトの表面に変な線が入り乱れた表示になる。オブジェクトの重なりもなく、法線も異常がないのに崩れた表示になる。

症状

3D ViewportのRenderedモードや、最終レンダリング時には発生しない。

原因

3D Viewportのサイドバー(Sidebar)のViewタブ>View>Clip Startが0.000001mなど極端に低い値になっている。
※0mを入力したときに自動でこの値になります。

原因

donuts tutorialでは、途中でこのClip Startの値を0.001mにし、拡大して作業できるようにしているのですが、このとき誤って0を入力していたのだと思います。

解消方法

3D ViewportのサイドバーのViewタブ>View>Clip Startを0.001mにする。

解決方法

現象の詳細メモ

  • 3D Viewportでマウスホイールで拡大すると直る。
  • 0キーでActive Camera表示にすると直る。
  • 透視図ビュー(perspective view)のみで発生し、正投影ビュー(orthographic view)では発生しない。
3D Viewportでマウスホイールで拡大すると直る。
0キーでActive Camera表示にすると直る。
透視図ビュー(perspective view)のみで発生し、正投影ビュー(orthographic view)では発生しない。

参考資料

参考にしたBlender Stack Exchangeの質問です。
透視図が変です。Solidモードでオブジェクトの輪郭しか表示されません。(The Perspective view is weird. I am in solid mode and I still only have outlines of the objects – Blender Stack Exchange)

この質問では、大きなオブジェクトが表示されないとのことですが、原因は同じでClippingの設定が原因です。回答でもClip Startは0.001mにすることを推奨しています。

また、Blenderのマニュアルでも解説があります。下記のサイドバーのClip Start/Endの項です。
Sidebar — Blender manual

A large clipping range will allow you to see both near and far objects, but reduces the depth precision resulting in artifacts.
In some cases, a very large range may cause operations that depend on the depth buffer to become unreliable although this depends on the graphics card and drivers.
See Troubleshooting Depth Buffer Glitches for more information.

クリッピング範囲が広いと遠近両方のオブジェクトを表示できますが、深度演算の精度が低下し、アーティファクトが発生します。
巨大なクリッピング範囲は、グラフィックカードとドライバーによって異なりますが、深度バッファに関わる処理の信頼性が低下させる場合があります。
詳細については Troubleshooting Depth Buffer Glitches を参照してください。

Sidebar — Blender manual

この記事を書いていて気づいたのですが、そもそもマニュアルにこの現象についての情報がありました。
3D Viewport / Rendering / Depth Buffer Glitches — Blender Manual

現象が発生する理由(推測)

下記でクリッピングについての情報が得られます。
Camera – Blender manual

カメラのレンズとクリッピング設定

ここからは推測なのですが、Clip Startを極端に小さくすると焦点とClip Startの距離が近くなり、その状態で遠くのものを表示しようとすると、焦点とClip Startの誤差による破綻(同位置になったり、Clip Startが焦点よりも後ろに来たり)が発生して描画が乱れるのかなと。これがVGA依存になる理由なのかなと推測しています。(VGAの頂点の計算精度による)

マウスホイールで拡大すると直るのは、実際に描画対象のオブジェクトが焦点に近づくことで、計算の精度が上げられたとかでしょうか?

なお、0キーでActive Camera表示にすると直るのは、カメラ設定の中にClip Start項目がありそれが適用されているためです。

正投影ビュー(orthographic view)では、Clip Start設定が無視されるため現象が発生しません。

Orthographic view: The planes with distance of negative end and positive end from the focus point, in this case the Start is ignored.
正投影ビュー:フォーカスポイントから負の端と正の端の距離がある平面。この場合、開始は無視されます。

Sidebar — Blender manual