জেস্টের সাথে কীভাবে ESLint ব্যবহার করবেন


252

আমি জেস্ট টেস্টিং ফ্রেমওয়ার্ক সহ ESLint লিন্টার ব্যবহার করার চেষ্টা করছি।

জাস্ট টেস্টগুলি কিছু গ্লোবালগুলির সাথে চালিত হয় jest, যার সম্পর্কে আমি লাইনটারটি জানাতে হবে; তবে জটিল জিনিসটি হ'ল ডিরেক্টরি কাঠামো, জেস্টের সাথে টেস্টগুলি __tests__ফোল্ডারে সোর্স কোডের সাথে এম্বেড করা থাকে , সুতরাং ডিরেক্টরি কাঠামোটি দেখতে এমন কিছু দেখাচ্ছে:

src
    foo
        foo.js
        __tests__
            fooTest.js
    bar
        bar.js
        __tests__
            barTest.js

সাধারণত, আমি আমার সমস্ত পরীক্ষাগুলি একটি একক .eslintrcদিরের অধীনে করতাম এবং আমি কেবল সেখানে গ্লোবালগুলি যুক্ত করতে একটি ফাইল যুক্ত করতে পারি ... তবে আমি অবশ্যই .eslintrcপ্রতিটি একক দিরের সাথে কোনও ফাইল যুক্ত করতে চাই না __test__

আপাতত, আমি সবেমাত্র গ্লোবাল .eslintrcফাইলে পরীক্ষার গ্লোবালগুলি যুক্ত করেছি , তবে এর অর্থ যেহেতু আমি এখন jestনন-টেস্টিং কোডটিতে উল্লেখ করতে পারি , এটি "ডান" সমাধানের মতো বলে মনে হয় না।

ডিরেক্টরি নামের উপর ভিত্তি করে কিছু প্যাটার্নের ভিত্তিতে নিয়ম প্রয়োগের এসিলিন্ট পাওয়ার কোনও উপায় আছে বা এর মতো কিছু?


1
এটি প্রকৃত উত্তরের জন্য কিছুটা নিষ্ঠুর শক্তি, তবে আপনার একটি পৃথক আবরণের কাজ থাকতে পারে যা ম্যানুয়ালি eslint-testএকটি গ্লোব সহ কোনও ফাইল ব্যবহার করে , যেমন eslint **/__tests__/*.js -c eslint-test.yml। তাই বলা হয়, আমি সেখানে একটি অনেক বিপদ মনে করি না jestবা beforeEachবৈশ্বিক উৎপাদন কোড ছড়িয়ে লিক;)
নিক Tomlin

উত্তর:


669

দস্তাবেজগুলি দেখায় আপনি এখন যোগ করতে সক্ষম হলেন:

"env": {
    "jest": true
}

আপনার .eslintrcযা আপনার পরিবেশে ঠাট্টা সম্পর্কিত সমস্ত জিনিস যুক্ত করবে, ল্যাটারের ত্রুটিগুলি / সতর্কতাগুলি দূর করবে।


27
এই পদ্ধতির সাহায্যে " .test.js" বা "__tests __ / .js" প্যাটার্নটি মেলে এমন ফাইলগুলির বাইরে "বর্ণনা" বা "এটি " ব্যবহারের ফলে লেটিং ত্রুটি হবে না। এটি অর্জন করার কোনও উপায় আছে কি?
n1ru4l

7
@ l0rin আপনি এমন একটি .eslintrcফাইল যুক্ত করতে পারেন যা .eslintrcআপনার __tests__ফোল্ডারে আপনাকে ডিফল্টভাবে প্রসারিত করে । যদি আপনার ওপি (একাধিক পরীক্ষার ফোল্ডার) এর মতো সমস্যা হয়, তবে আপনি .eslintrcটেমপ্লেট এবং একটি ক্ষুদ্র বাশ স্ক্রিপ্ট (যেমন কিছু ls **/__tests/ | xargs cp templates/.eslintrc) সহ সেগুলি তৈরি করতে পারেন
ইউলিস বিএন

2
সম্পর্কিত লিঙ্কটি এখানে
devonj

73

ESLint সংস্করণ> = 4 হিসাবে এটি সমর্থন করে:

/*
.eslintrc.js
*/
const ERROR = 2;
const WARN = 1;

module.exports = {
  extends: "eslint:recommended",
  env: {
    es6: true
  },
  overrides: [
    {
      files: [
        "**/*.test.js"
      ],
      env: {
        jest: true // now **/*.test.js files' env has both es6 *and* jest
      },
      // Can't extend in overrides: https://github.com/eslint/eslint/issues/8813
      // "extends": ["plugin:jest/recommended"]
      plugins: ["jest"],
      rules: {
        "jest/no-disabled-tests": "warn",
        "jest/no-focused-tests": "error",
        "jest/no-identical-title": "error",
        "jest/prefer-to-have-length": "warn",
        "jest/valid-expect": "error"
      }
    }
  ],
};

এসলিন্ট কনফিগারেশনের "প্রসারিত ইন ওভাররাইড" সীমাবদ্ধতার জন্য এখানে একটি কার্যবিধির (এখানে অন্য উত্তর থেকে, এটিকে ভোট দিয়ে দিন!):

overrides: [
  Object.assign(
    {
      files: [ '**/*.test.js' ],
      env: { jest: true },
      plugins: [ 'jest' ],
    },
    require('eslint-plugin-jest').configs.recommended
  )
]

Https://github.com/eslint/eslint/issues/8813#issuecomment-320448724 থেকে


4
আপনাকে ধন্যবাদ, এটি এই প্রশ্নের পুরোপুরি সঠিক সমাধান, কারণ এটি আসলে এটির উত্তর দেয়। আমার জন্য কাজ!
শ্রা

1
এটা অসাধারণ! আমার ESLint কে সংস্করণ> = 4 এ আপডেট করার সাথে সাথে একটিতে "files"এবং "env"আপত্তি যুক্ত করার "overrides"পরে eslint.rcআমি আর টেস্টিং ফাইলের বাইরে জেস্ট নির্দিষ্ট সিনট্যাক্স পাসিং লন্টিংয়ের জন্য আর চিন্তিত হব না।
TheDarkIn1978

1
যখন আপনার কোনও মানক নয় ফোল্ডার কাঠামো থাকে তখন দুর্দান্ত সমাধান এবং অন্যান্য ফ্রেমওয়ার্কগুলির জন্য (জুঁই) কাজ করে।
এলিয়ট নেলসন

2
আমি সেই লোকটি যিনি স্বীকৃত উত্তরটি লিখেছেন - এই উত্তরটি আমার চেয়ে অনেক ভাল! যদিও আমি আমার উত্তরটি লিখেছিলাম সে সময়ে, এই সমস্যাটি ভালভাবে সমাধান করার একমাত্র উপায় ছিল।
ডেভ কুপার

6
ইএসলিন্ট এখন ওভাররাইডগুলিকে প্রসারিত করতে সমর্থন করে
নিক

21

আপনি নিম্নলিখিত হিসাবে আপনার পরীক্ষা ফাইলের মধ্যে পরীক্ষা env সেট করতে পারেন:

/* eslint-env jest */

describe(() => {
  /* ... */
})

13

জাচারির উত্তরটি সম্পূর্ণ করতে এখানে এসিলিন্ট কনফিগারেশনের "প্রসারিত ইন ওভাররাইড" সীমাবদ্ধতার জন্য কার্যনির্বাহীকরণ রয়েছে:

overrides: [
  Object.assign(
    {
      files: [ '**/*.test.js' ],
      env: { jest: true },
      plugins: [ 'jest' ],
    },
    require('eslint-plugin-jest').configs.recommended
  )
]

Https://github.com/eslint/eslint/issues/8813#issuecomment-320448724 থেকে


2

প্যাটার্ন ভিত্তিক কনফিগারগুলি ESLint এর 2.0.0 প্রকাশের জন্য নির্ধারিত রয়েছে। আপাতত, তবে আপনাকে দুটি পৃথক কাজ তৈরি করতে হবে (মতামতে বর্ণিত হিসাবে) পরীক্ষার জন্য একটি এবং বাকি কোডের জন্য একটি এবং বিভিন্ন .eslintrc ফাইল সরবরাহের সময় উভয়টি চালান।

PS ইএসলিন্টের পরবর্তী প্রকাশে একটি হাস্যকর পরিবেশ আসছে, এটি প্রয়োজনীয় সমস্ত গ্লোবালগুলি রেজিস্টার করবে।


2

আমি সমস্যাটি সমাধান করেছি REF

চালান

# For Yarn
yarn add eslint-plugin-jest -D

# For NPM
npm i eslint-plugin-jest -D

এবং তারপরে আপনার .eslintrcফাইলটিতে যুক্ত করুন

{
    "extends": ["airbnb","plugin:jest/recommended"],
}

1

শুধুমাত্র __tests__ফোল্ডারের জন্য পরিবেশ যুক্ত করুন

আপনি .eslintrc.ymlআপনার __tests__ফোল্ডারে একটি ফাইল যুক্ত করতে পারেন , এটি আপনাকে প্রাথমিক কনফিগারেশন প্রসারিত করে:

extends: <relative_path to .eslintrc>
env:
    jest: true

আপনার যদি কেবল একটি __tests__ফোল্ডার থাকে তবে এই সমাধানটি সর্বোত্তম কারণ যেহেতু এটির প্রয়োজন কেবল সেখানে পরিহাসের পরিবেশ।

অনেক পরীক্ষার ফোল্ডার নিয়ে কাজ করছে

আপনার যদি আরও টেস্ট ফোল্ডার (ওপিএস কেস) থাকে তবে আমি এখনও এই ফাইলগুলি যুক্ত করার পরামর্শ দিই। এবং যদি আপনার কাছে প্রচুর ফোল্ডার থাকে তবে সেগুলি একটি সহজ zsh স্ক্রিপ্টের সাথে যুক্ত করতে পারে:

#!/usr/bin/env zsh

for folder in **/__tests__/ ;do
    count=$(($(tr -cd '/' <<< $folder | wc -c)))
    echo $folder : $count
    cat <<EOF > $folder.eslintrc.yml
extends: $(printf '../%.0s' {1..$count}).eslintrc
env:
    jest: true
EOF
done

এই স্ক্রিপ্টটি __tests__ফোল্ডারগুলির সন্ধান করবে এবং .eslintrc.ymlউপরে প্রদর্শিত কনফিগারেশনটিতে একটি ফাইল যুক্ত করবে । এই স্ক্রিপ্টটি আপনার পিতামাতার সমন্বিত ফোল্ডারের মধ্যে চালু করতে হবে .eslintrc


1

উত্তরগুলির মধ্যে কয়েকটি ধরে নিয়েছে যে আপনি 'এসলিন্ট-প্লাগইন-জাস্ট' ইনস্টল করেছেন, তবে এটি করার প্রয়োজন ছাড়াই আপনি কেবল নিজের .eslintrcফাইলে এটি করতে পারেন , যুক্ত করুন:

  "globals": {
    "jest": true,
  }

-8

আপনার .eslintignore ফাইলটিতে নিম্নলিখিত মানটি যুক্ত করুন:

**/__tests__/

এটি __tests__ ডিরেক্টরি এবং তাদের শিশুদের সমস্ত দৃষ্টান্ত উপেক্ষা করবে।


4
এটি আমি যা চাই তা ঠিক নয়, আমি পরীক্ষার ফাইলগুলিকে উপেক্ষা করতে চাই না, আমি এখনও তাদের লিঙ্ক করতে চাই, আমি ঠিক কীভাবে প্রয়োজনীয় লিঙ্কগুলি সঠিকভাবে লিঙ্ক করতে হবে তা নির্ধারণ করতে চাই।
রিটসাম

2
খুব খারাপ ধারণা, এসলিন্ট পরীক্ষার কোড সহ সমস্ত কোডে সহায়তা করে।
ড্যানিয়েল কমাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.