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');
  });
});

自訂

預設情況下,此插件將在工作目錄的 fixtures 中查找範例。您可能需要透過設定範例所在的目錄來自訂此設定。

import path from 'path';

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

當您宣告要使用轉換器轉換特定範例時,此插件將查找相對於上面宣告的 fixtureDirectory,名為 <fixtureName>.input.js 的檔案。它將讀取此檔案,使用您的轉換器轉換內容,並將其與相對於範例目錄名為 <fixtureName>.output.js 的檔案進行比較。您可以透過在選項中傳遞自訂的 inputFixturePathoutputFixturePath 來客製化這些路徑(兩者都接受兩個參數,即範例名稱和範例目錄的根目錄)。

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 配置選項。

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