Anchorを一例にしているが、ts-mochaを使っている環境であれば、ほかも同じように対応可能。
Agenda
やりたいこと
dotenvを使うとデフォルトだと.envファイルが読み込まれるが、開発用に.env.devを読み込むようにしたい。
指定のenvファイルを読み込むために、testファイル内にファイル設定情報を書くことでも対応できるが、ソース内はなるべく汚染したくないため、ts-mochaの引数として.env.devを読み込めるようにしたい。
前提
- Anchorのセットアップが完了している(anchor init)
- ts-mochaとdotenvがインストール済み
対応方法
anchor test を実行すると、Anchor.tomlのscriptsが実行される仕組みになっているため、まずここを書き換えていく。
「-r dotenv/config」と「dotenv_config_path=.env.dev」を追記。
Anchor.toml:
[features]
seeds = false
skip-lint = false
[programs.localnet]
hok = "CTgTMTJ2jkCU2TKkWa7FNiLa8aEcsu1knKPahSN9tLD"
[registry]
url = "https://api.apr.dev"
[provider]
cluster = "Localnet" # For Anchor Test(tests/hok.ts)
wallet = "~/.config/solana/id.json"
[scripts]
# test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
test = "npx ts-mocha -r dotenv/config -p ./tsconfig.json -t 1000000 tests/**/*.ts dotenv_config_path=.env.dev"
.evn.devファイルを作成する。
ディレクトリ構成:
.
├── .DS_Store
├── .anchor
├── .env.dev ← これを作成
├── .git
├── .gitignore
├── .prettierignore
├── .vscode
├── Anchor.toml
├── Cargo.lock
├── Cargo.toml
├── app
├── migrations
├── node_modules
├── package-lock.json
├── package.json
├── programs
├── target
├── tests
├── tsconfig.json
└── yarn.lock
.env.dev:
SECRET_KEY="[42,10,22,97,116,115,107,57,226,247,40,179,216,11,216,9,110,233,110,240,85,78,144,173,253,79,75,12,175,216,43,214,245,164,74,111,54,131,150,17,113,31,4,20,159,81,221,64,109,212,188,82,203,134,242,13,210,177,22,8,166,44,126,233]"
これで以下「process.env.SECRET_KEY」のように、.env.devがtestファイル内で利用できるようになる。
testファイル:
const connection = new Connection('http://127.0.0.1:8899', 'confirmed');
if (!process.env.SECRET_KEY) throw Error('Not found SECRET_KEY');
const secretKey = new Uint8Array(JSON.parse(process.env.SECRET_KEY));
const keypair = Keypair.fromSecretKey(secretKey);
const wallet = new anchor.Wallet(keypair);
const provider = new anchor.AnchorProvider(
connection, wallet, { commitment: 'confirmed' },
);
anchor.setProvider(provider);
補足
.env.devファイルは正常に読み込めているが、実行時に以下のWarningが出る。
いろいろ試したが解決できず。
Warning: Cannot find any files matching pattern "dotenv_config_path=.env.dev"