जैस्मीन को रेल 6 में कैसे कॉन्फ़िगर करें?


9

मैं रेल्स 6 वातावरण में जैस्मीन को कैसे कॉन्फ़िगर कर सकता हूं (जहां वेबपैक जावास्क्रिप्ट के लिए परिसंपत्ति पाइपलाइन को बदल देता है) इसलिए मैं अपने ऐप के लिए लिखे गए जावास्क्रिप्ट मॉड्यूल का परीक्षण कर सकता हूं?

मैंने चमेली रत्न स्थापित किया, भाग कर rails generate jasmine:install, और jasmine.ymlअपने जावास्क्रिप्ट स्रोत और चश्मे के स्थान को इंगित करने के लिए संपादित किया ।

समस्या यह है कि मैं आयात / निर्यात विवरण का उपयोग नहीं कर सकता। (उदाहरण के लिए, क्रोम में ऐसा गलती से हुआ परीक्षण के परिणाम के लिए मेरा पहला मॉड्यूल लोड करने का प्रयास: Uncaught SyntaxError: Unexpected token 'export')

मैं जो बता सकता हूं, उसमें मुझे जैस्मीन को बाबेल का उपयोग करने की आवश्यकता है; लेकिन, मैं नए रेल 6 लेआउट में ऐसा करने के लिए निर्देश प्राप्त करने में कोई भाग्य नहीं पा रहा हूं।


हे ज़ैक, @ डॉफ्स, क्या आपको मेरे जवाब पर एक नज़र डालने का मौका मिला? क्या यह आपके लिए पर्याप्त है या मुझे गहराई से जांच / मदद करनी चाहिए?
सर्गेई मेल

अभी नहीं। मेरी नियमित नौकरी के लिए जनवरी और फरवरी वर्ष का सबसे व्यस्त समय है। मैं आपको जल्द से जल्द बता दूंगा।
ज़ैक

जवाबों:


5

हाँ तुम सही हो। मुख्य समस्या jasmine-gemयह है कि यह बेबल के माध्यम से कल्पना को पाइप नहीं करता है। मुझे आपकी समस्या का त्वरित समाधान करने दें और उसके बाद, मैं एक समान दृष्टिकोण के संभावित कार्यान्वयन के बारे में सोचूंगाjasmine-gem

मुख्य विचार रेल वेबपैक के माध्यम से ऐनक को पाइप करना है जब तक कि इसमें सभी आवश्यक बैबल कॉन्फ़िगरेशन हैं।

  1. स्थापित करें jasmine-coreक्योंकि हम jasmine-gemइस समाधान में उपयोग नहीं करेंगे
    yarn add jasmine-core -D
  2. अब दो अतिरिक्त वेबपैक पैक बनाएं। एक जैस्मीन के लिए है और इसमें केवल जैस्मीन और टेस्ट रनर शामिल होंगे

    // app/javascript/packs/jasmine.js
    
    import 'jasmine-core/lib/jasmine-core/jasmine.css'
    import 'jasmine-core/lib/jasmine-core/jasmine-html.js'
    import 'jasmine-core/lib/jasmine-core/boot.js'
    import 'jasmine-core/images/jasmine_favicon.png'

    और आपके आवेदन कोड और चश्मे के लिए दूसरा

    // app/javascript/packs/specs.js
    
    // First load your regular JavaScript (copy all the JavaScript imports from your main pack).
    let webpackContext = require.context('../javascripts', true, /\.js(\.erb)?$/)
    for(let key of webpackContext.keys()) { webpackContext(key) }
    
    // Then load the specs
    let specsContext = require.context('../spec', true, /\.js(\.erb)?$/)
    for(let key of specsContext.keys()) { specsContext(key) }

    अपने '../javascripts'और '../spec'रास्तों पर ध्यान दें । मेरे लिए यह समान '../../assets/javascripts'और '../../../spec'सम्मानजनक रूप से देखा गया ।

  3. फिर जैस्मीन के लिए Webpack ProvPlugin जोड़ें (इस कोड को इसमें जोड़ें config/webpack/environment.js)

    // config/webpack/environment.js
    
    const webpack = require('webpack')
    
    environment.plugins.prepend('Provide', new webpack.ProvidePlugin({
       jasmineRequire: 'jasmine-core/lib/jasmine-core/jasmine.js',
    }))
  4. अपने आवेदन में जैस्मीन रनर पेज जोड़ें

    # config/routes.rb
    
    Rails.application.routes.draw do
      # ...
    
      if Rails.env.development? || Rails.env.test?
        get 'jasmine', to: 'jasmine#index'
      end
    end
    # app/controllers/jasmine_controller.rb
    
    class JasmineController < ApplicationController
      layout false
    
      def index
      end
    end
    # app/views/jasmine/index.html.haml
    
    <html>
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <%= stylesheet_pack_tag 'jasmine', :media => 'all' %>
    </head>
    <body>
      <%= javascript_pack_tag 'jasmine' %>
      <%= javascript_pack_tag 'specs' %>
    </body>
    </html>
  5. अब आपकी जैस्मिन को /jasmineरूट पर काम करना चाहिए

यह उत्तर इस पोस्ट के आधार पर तैयार किया गया है , हालांकि, मैंने रूबी 2.6.3, रेल 6.0.2 पर निर्देशों की पुनरावृत्ति की है, सिफारिशों में उचित परिवर्तन जोड़ा है और यह साबित करता है कि यह काम करता है।

कृपया, मुझे बताएं कि क्या मेरा उत्तर आपके लिए मददगार था या आपको कुछ अतिरिक्त जानकारी चाहिए। हालांकि, मैं एक समाधान पर काम करने जा रहा हूं जो jasmineमणि या इसी तरह के कार्यान्वयन के साथ सफल होगा ।


क्या मैं आपको किसी दिन टेस्ट करने के लिए कह सकता हूँ? मैंने इन निर्देशों का पालन किया, चमेली काम कर रहा है, लेकिन अचानक bootstrap.min.jsएक त्रुटि फेंक jqueryरहा है कि मूल रूप से इसका मतलब पहले लोड नहीं किया जा रहा है bootstrap। हालाँकि,] मुझे नहीं पता चला कि इस कोड में जेएस लोड ऑर्डर में क्या बदलाव किया गया है ... खासकर जब से मेरा बूटस्ट्रैप सीडीएन के माध्यम से javascript_pack_tag 'application'लाइन लेआउट के बाद लोड हो रहा है और मेरे पास application.jsपहले से ही ए है require('jquery')। यदि आपके पास स्थानीय वातावरण में यह सेट-अप है, तो क्या आप एप्लिकेशन लेआउट में CDN के माध्यम से बूटस्ट्रैप लोड कर सकते हैं, और देखें कि क्या यह काम करता है?
जेम्स

मैं यह समझ गया। चरण 3 उस कोड को ओवरराइड कर रहा था जिसमें jquery प्लगइन जोड़ा गया था। इस उत्तर ने इसे ठीक कर दिया: stackoverflow.com/questions/51447443/…
james
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.