Я написал собственное правило 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 представляет объект из недопустимого блока в тестовом примере. Я не могу понять, что сообщений представляет здесь. Я получаю пустой массив для его значения.