chai-jscodeshift

chai-jscodeshiftjscodeshift に対して、指定された入力フィクスチャがテスト対象のトランスフォーマーによって変換された後に、出力フィクスチャと一致するかどうかを確認するためのカスタムアサーションを提供します。

セットアップ

import chai from 'chai';
import chaiJSCodeShift from 'chai-jscodeshift';
chai.use(chaiJSCodeShift());

使用方法

import myTransform from '../src/my-transform';

describe('myTransform', () => {
  it('transforms properly', () => {
    expect(myTransform).to.transform('my-fixture');

    // or

    assert.transforms(myTransform, 'my-fixture');
  });
});

カスタマイズ

デフォルトでは、このプラグインは作業ディレクトリ内のフィクスチャのフィクスチャを検索します。たぶん、フィクスチャが表示されるディレクトリを設定することでカスタマイズしたいと思うでしょう

import path from 'path';

chai.use(chaiJSCodeShift({
  fixtureDirectory: path.join(__dirname, 'fixtures')
}));

トランスフォーマーによる特定のフィクスチャの変換を求めると、このプラグインは上記の fixtureDirectory に相対した <fixtureName>.input.js という名前のファイルを探します。このファイルを読み取り、トランスフォーマーを使用してコンテンツを変換し、フィクスチャ ディレクトリに相対した <fixtureName>.output.js という名前のファイルに対して比較します。カスタム inputFixturePath または outputFixturePath をオプションとして渡すことで、これらのパスのいずれかをカスタマイズできます(どちらのオプションも 2 つの引数を使用します。フィクスチャの名前とフィクスチャ ディレクトリのルート)

chai.use(chaiJSCodeShift({
  fixtureDirectory: path.join(__dirname, 'fixtures'),
  inputFixturePath(fixtureName, fixtureDirectory) {
    return path.join(fixtureDirectory, 'input', `${fixtureName}.js`);
  },
  inputFixturePath(fixtureName, fixtureDirectory) {
    return path.join(fixtureDirectory, 'output', `${fixtureName}.js`);
  },
}));

カスタムオプションを設定することもできます。このオプションは transformOptions 設定オプションを使用して、すべての呼び出し時にトランスフォーマーに対する 3 番目の引数として渡されます

chai.use(chaiJSCodeShift({
  transformOptions: {
    printOptions: {space: 'single'},
  },
}));