簡體   English   中英

設置笑話測試

[英]Setting up jest tests

我正在開玩笑地在生成YAML和JSON的工具上運行單元測試,這不是純JavaScript。 Jest使我可以實際測試輸出中的值,因此非常方便。

我有一個目錄,組件:

/workdir/components/
├── component1
└── component2

在每個組件中,我都有一個測試目錄,其中包含一些有趣的測試。 這是一個示例測試:

// Define tests for component
//
const _ = require("lodash");
const componentName = 'my_component';
const {
    getTestEnvironmentComponents
} = require("../../../lib/testHelpers.js");

const component = getTestEnvironmentComponents(componentName);


test("Checking array properties", () => {
  expect(Array.isArray(component)).toBe(true);
  expect(component).toHaveLength(2);
});

testHelpers.js里面,我有這個:

module.exports = {
  getTestEnvironmentComponents: function (component) {
    const contents = require('.././components/'+component+'/tmp/test-manifest.json');
    return contents;
  },
  },
};

因此,我有一個幫助程序腳本,該腳本希望在組件目錄內有一個生成的JSON文件。

現在,我需要在每次測試之前針對每個組件生成該JSON文件。 造成這一困難的原因是,每個組件的生成JSON文件的方法各不相同。 當我對單個組件進行測試時,我只是將jest.config.js添加到組件中,如下所示:

module.exports = {
  globalSetup: "./test/0-setup.js",
  verbose: true,
};

然后為測試定義0-setup.js ,如下所示:

// This file is the "globalSetup" file.
// FIXME: make this global somehow
module.exports = () => {
    const execa = require("execa");
    const fs = require("fs");
    const path = require("path");

    const command = "generate-json";
    const output = execa.shellSync(command);
    const testEnvironmentOutput = JSON.parse(output.stdout);

    if (!fs.existsSync("./tmp")) {
        fs.mkdirSync("./tmp");
    }

    fs.writeFileSync('./tmp/test-manifest.json', JSON.stringify(testEnvironmentOutput));
};

這適用於一個組件,但這意味着要運行我的jest測試,我必須進入每個單獨的組件並分別運行笑話。

所以:

  • 有沒有辦法在組件目錄中定義安裝任務?
  • 也許有更好的方法來執行此操作,以便我可以在根目錄中運行jest ,然后它將遍歷子樹並以其他方式運行設置任務?

聽起來您需要在逐個測試的基礎上做大量工作,然后才能運行測試文件中的測試。

這聽起來像beforeAll的完美用法。

這是一個高度簡化的示例:

const componentName = 'my_component';

let component;

beforeAll(async () => {
  doSomePrepWork();
  await doSomethingAsync();
  doSomeMorePrepWork();
  component = getTestEnvironmentComponents(componentName);
});

test("Checking array properties", () => {
  expect(Array.isArray(component)).toBe(true);
  expect(component).toHaveLength(2);
});

Jest將在任何測試運行之前運行beforeAll ,因此您可以使用它來為測試文件中的所有測試進行設置工作。

有用的注釋 :如果您需要在beforeAll進行異步工作, beforeAll可以向它傳遞一個async函數(或向它傳遞一個返回Promise的普通函數),它將等待最終的Promise解析,然后再允許Jest繼續測試。 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM