Làm cách nào để định cấu hình Jasmine trong Rails 6?


9

Làm cách nào để định cấu hình Jasmine trong môi trường Rails 6 (nơi Webpack thay thế đường dẫn tài sản cho Javascript) để tôi có thể kiểm tra các mô-đun Javascript mà tôi đã viết cho ứng dụng của mình?

Tôi đã cài đặt đá quý hoa nhài, chạy rails generate jasmine:installvà chỉnh sửa jasmine.ymlđể chỉ đến vị trí của nguồn Javascript và thông số kỹ thuật của tôi.

Vấn đề là tôi không thể sử dụng báo cáo nhập / xuất. (Ví dụ: cố gắng tải mô-đun đầu tiên của tôi để kiểm tra kết quả trong lỗi này trong Chrome Uncaught SyntaxError: Unexpected token 'export':)

Từ những gì tôi có thể nói, tôi cần thiết lập Jasmine để sử dụng babel; nhưng, tôi không gặp may mắn khi tìm thấy hướng dẫn về cách thực hiện việc này trong bố cục Rails 6 mới.


Này Zack, @Dofs, bạn có cơ hội để xem câu trả lời của tôi không? Là đủ cho bạn hay tôi nên giúp đỡ / điều tra sâu hơn?
Serge Mell

Chưa. Tháng một và tháng hai là thời gian bận rộn nhất trong năm cho công việc thường xuyên của tôi. Tôi sẽ cho bạn biết ngay khi tôi có thể.
Zack

Câu trả lời:


5

Vâng bạn đã đúng. Vấn đề chính jasmine-gemlà nó không dẫn thông số kỹ thuật qua babel. Hãy để tôi đăng giải pháp nhanh nhất cho vấn đề của bạn và sau đó, tôi sẽ nghĩ đến việc thực hiện có thể của một cách tiếp cận tương tự jasmine-gem.

Ý tưởng chính là dẫn các thông số kỹ thuật qua gói web rails miễn là nó có tất cả các cấu hình babel cần thiết.

  1. Cài đặt jasmine-corevì chúng tôi sẽ không sử dụng jasmine-gemtrong giải pháp này
    yarn add jasmine-core -D
  2. Bây giờ tạo hai gói webpack bổ sung. Một là cho Jasmine và sẽ chỉ chứa Jasmine và người chạy thử

    // 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'

    Và cái thứ hai cho mã ứng dụng của bạn và thông số kỹ thuật

    // 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) }

    Hãy chú ý đến '../javascripts''../spec'con đường của bạn . Đối với tôi nó giống như '../../assets/javascripts''../../../spec'tôn trọng.

  3. Sau đó thêm Webpack ProvPlugin cho Jasmine (thêm mã này vào 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. Thêm trang Jasmine ranner vào ứng dụng của bạn

    # 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. Bây giờ Jasmine của bạn nên làm việc trên /jasminetuyến

Câu trả lời này được chuẩn bị dựa trên bài đăng này , tuy nhiên, tôi đã kiểm tra lại các hướng dẫn về ruby ​​2.6.3, rails 6.0.2, thêm các thay đổi phù hợp vào các khuyến nghị và chứng minh rằng điều này hoạt động.

Xin vui lòng, cho tôi biết nếu câu trả lời của tôi là hữu ích cho bạn hoặc bạn cần một số thông tin bổ sung. Tuy nhiên, tôi sẽ thực hiện một giải pháp sẽ thành công với jasmineđá quý hoặc triển khai tương tự.


Tôi có thể yêu cầu bạn kiểm tra điều gì đó không? Tôi làm theo những hướng dẫn này, hoa nhài đang hoạt động, nhưng đột nhiênbootstrap.min.js đang xuất hiện một lỗi mà về cơ bản jquerylà không được tải trước đó bootstrap. Tuy nhiên,] Tôi không thể tìm thấy những gì trong mã này thay đổi thứ tự tải JS ... đặc biệt là khi bootstrap của tôi đang được tải qua CDN trong bố cục ứng dụng sau javascript_pack_tag 'application'dòng và tôi application.jsđã có một require('jquery'). Nếu bạn có thiết lập này trong môi trường cục bộ, bạn có thể tải bootstrap qua CDN trong bố cục ứng dụng không và xem nó có hoạt động không?
James

Tôi đã hiểu rồi. Bước 3 đã ghi đè mã đã thêm plugin jquery. Câu trả lời này đã sửa nó: stackoverflow.com/questions/51447443/ từ
james
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.