AssertionError на RuleTester для правила ESlint - PullRequest
1 голос
/ 17 апреля 2019

Я написал собственное правило ESLint для приложения NodeJS. Правило работает как положено. Тем не менее, я столкнулся с проблемой запуска модульного теста для моего пользовательского правила.

Я следовал документации ESlint для написания RuleTester , который по сути является Mocha модульным тестовым примером. Ниже приведен мой код теста.

const { RuleTester } = require("eslint");
const rule = require("../../../lib/rules/chai-expect");

const ruleTester = new RuleTester();
ruleTester.run("chai-expect", rule, {
  valid: [
    {
      code: "chai.expect(result).to.have.status(200);"
    }
  ],
  invalid: [
    {
      code: "expect(result).to.have.status(200);",
      errors: [
        {
          message: "chai.expect() should be used for assertions in test cases."
        }
      ]
    },
    {
      code: "result.should.have.status(200);",
      errors: [
        {
          message: "chai.expect() should be used for assertions in test cases."
        }
      ]
    },
    {
      code: "should(result).have.status(200);",
      errors: [
        {
          message: "chai.expect() should be used for assertions in test cases."
        }
      ]
    }
  ]
});

Я предоставил один сценарий для допустимых и три сценария для недействительных случаев. Тестовый пример работает нормально для действительного случая. Для неверного случая я получаю следующую ошибку для всех трех сценариев.

1) chai-expect
      invalid
        expect(result).to.have.status(200):

 AssertionError [ERR_ASSERTION]: Should have 1 error but had 0: []
 + expected - actual

 -0
 +1

 at testInvalidTemplate (/node_modules/eslint/lib/testers/rule->tester.js:468:24)
 at Context.RuleTester.it (/node_modules/eslint/lib/testers/rule->tester.js:584:25)

Я отладил эту ошибку и обнаружил этот блок в ошибке выброса библиотеки ESLint.

assert.strictEqual(
    messages.length, item.errors.length,
    util.format(
        "Should have %d error%s but had %d: %s",
        item.errors.length, item.errors.length === 1 ? "" : "s", messages.length, util.inspect(messages)
    )
);

item представляет объект из недопустимого блока в тестовом примере. Я не могу понять, что сообщений представляет здесь. Я получаю пустой массив для его значения.

...