जेस्ट के साथ ESLint का उपयोग कैसे करें


254

मैं जेस्ट टेस्टिंग फ्रेमवर्क के साथ ESLint लिंटर का उपयोग करने का प्रयास कर रहा हूं।

जेस्ट टेस्ट कुछ ग्लोबल्स के साथ चलते हैं jest, जैसे मुझे लिंटर के बारे में बताना होगा; लेकिन मुश्किल बात निर्देशिका संरचना है, जेस्ट के साथ परीक्षण __tests__फ़ोल्डर्स में स्रोत कोड के साथ एम्बेडेड होते हैं , इसलिए निर्देशिका संरचना कुछ दिखती है:

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

आम तौर पर, मेरे पास एक ही dir के तहत मेरे सभी परीक्षण होंगे, और मैं .eslintrcग्लोबल्स को जोड़ने के लिए सिर्फ एक फ़ाइल जोड़ सकता हूं ... लेकिन मैं निश्चित रूप .eslintrcसे हर एक __test__dir में एक फ़ाइल नहीं जोड़ना चाहता ।

अभी के लिए, मैंने परीक्षण ग्लोबल्स को केवल वैश्विक .eslintrcफ़ाइल में जोड़ा है , लेकिन इसका मतलब है कि मैं अब jestगैर-परीक्षण कोड में संदर्भ दे सकता हूं , जो "सही" समाधान की तरह प्रतीत नहीं होता है।

क्या निर्देशिका नाम के आधार पर कुछ पैटर्न के आधार पर नियमों को लागू करने का एक तरीका है, या ऐसा कुछ?


1
यह वास्तविक उत्तर के लिए थोड़ा बहुत क्रूर बल है, लेकिन आपके पास एक अलग लाइनिंग कार्य हो सकता है जो मैन्युअल रूप eslint-testसे एक ग्लोब के साथ एक फ़ाइल का उपयोग करता है , जैसे eslint **/__tests__/*.js -c eslint-test.yml। उस ने कहा, मुझे नहीं लगता कि उत्पादन कोड में लीक होने jestया beforeEachवैश्विक खतरे का बहुत ज्यादा खतरा है ;)
निक टोमलिन

जवाबों:


673

डॉक्स दिखाते हैं कि आप अब इसे जोड़ने में सक्षम हैं:

"env": {
    "jest": true
}

आपके लिए .eslintrcजो लिंटर की त्रुटियों / चेतावनियों को समाप्त करते हुए, आपके पर्यावरण से संबंधित सभी जेस्ट को जोड़ देगा।


27
इस पद्धति के साथ " .test.js" या "__tests __ / .js" पैटर्न से मेल खाने वाली फ़ाइलों के बाहर "वर्णन" या "यह" का उपयोग लाइनिंग त्रुटियों के परिणामस्वरूप नहीं होगा। क्या इसे प्राप्त करने का कोई तरीका है?
n1ru4l

7
@ l0rin आप एक .eslintrcफ़ाइल जोड़ सकते हैं जो आपको .eslintrcअपने __tests__फ़ोल्डर में डिफ़ॉल्ट रूप से विस्तारित करती है । यदि आपको ओपी (एकाधिक परीक्षण फ़ोल्डर) के रूप में एक ही समस्या है, तो आप उन लोगों .eslintrcको एक टेम्प्लेट और एक छोटे बैश स्क्रिप्ट के साथ उत्पन्न कर सकते हैं (कुछ इस तरह ls **/__tests/ | xargs cp templates/.eslintrc)
Ulysse BN

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 में अपडेट करने और I में ऑब्जेक्ट "files"और "env"ऑब्जेक्ट जोड़ने से अब परीक्षण फ़ाइलों के बाहर जेस्ट विशिष्ट सिंटैक्स पास लाइनिंग के बारे में चिंता करने की ज़रूरत नहीं है। "overrides"eslint.rc
TheDarkIn1978

1
जब आप एक गैर-मानक फ़ोल्डर संरचना रखते हैं, तो उत्कृष्ट समाधान और अन्य चौखटे (चमेली) के लिए भी काम करता है।
इलियट नेल्सन

2
मैं वह आदमी हूँ जिसने स्वीकृत उत्तर लिखा है - यह उत्तर मेरी तुलना में बहुत अच्छा है! हालाँकि जिस समय मैंने अपना उत्तर लिखा, यह इस समस्या को अच्छी तरह से हल करने का एकमात्र तरीका था।
डेव कूपर

6
ESLint अब ओवरराइड्स में विस्तार करने का समर्थन करता है
निक

21

आप अपनी परीक्षा फ़ाइल में निम्नानुसार परीक्षा एनवी सेट कर सकते हैं:

/* 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 ESLint की अगली रिलीज में आने वाला एक जेस्ट वातावरण है, यह सभी आवश्यक ग्लोबल्स को पंजीकृत करेगा।


2

मैं समस्या का हल REF

Daud

# 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__फ़ोल्डर है, तो यह समाधान सबसे अच्छा है क्योंकि यह जेस्ट वातावरण को केवल उसी स्थान पर गुंजाइश करता है जहां इसकी आवश्यकता होती है।

कई परीक्षण फ़ोल्डरों के साथ काम करना

यदि आपके पास अधिक परीक्षण फ़ोल्डर (OPs मामला) है, तो मैं अभी भी उन फ़ाइलों को जोड़ने का सुझाव दूंगा। और अगर आपके पास उन फ़ोल्डरों के टन हैं, तो उन्हें एक साधारण 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
बहुत बुरा विचार, एस्लिंट टेस्ट कोड सहित - सभी कोड में मदद करता है।
डैनियल Kmak
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.