chai-jscodeshift

chai-jscodeshift 提供了一个自定义断言,用于 jscodeshift 检查给定输入 fixture 在经过测试中的转换器转换后是否与输出 fixture 相匹配。

安装

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

自定义

默认情况下,此插件会在工作目录中的 fixture 中查找 fixture。 您可能需要通过设置 fixture 出现的目录来进行自定义。

import path from 'path';

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

当您声明想要让转换器转换特定 fixture 时,此插件将查找一个名为 <fixtureName>.input.js 的文件,该文件相对于上面声明的 fixtureDirectory。 它将读取此文件,使用您的转换器转换内容,并将其与名为 <fixtureName>.output.js 的文件进行比较,该文件相对于 fixture 目录。 您可以通过在选项中传递自定义 inputFixturePathoutputFixturePath 来自定义这两个路径中的任何一个(这两个路径都接受两个参数,fixture 名称和 fixture 目录的根目录)

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