Rails 6에서 Jasmine을 구성하는 방법은 무엇입니까?


9

Rails 6 환경 (웹팩이 Javascript의 자산 파이프 라인을 대체 함)에서 Jasmine을 어떻게 구성하여 내 앱용으로 작성한 Javascript 모듈을 테스트 할 수 있습니까?

jasmine gem을 설치하고 실행 rails generate jasmine:install하고 jasmine.ymlJavascript 소스 및 사양의 위치를 ​​가리 키도록 편집 했습니다.

문제는 가져 오기 / 내보내기 문을 사용할 수 없다는 것입니다. (예를 들어, 시도 크롬이 오류에 테스트 결과에 내 첫 번째 모듈을로드 : Uncaught SyntaxError: Unexpected token 'export')

내가 말할 수있는 것에서, babel을 사용하려면 Jasmine을 설정해야합니다. 그러나 새로운 Rails 6 레이아웃 에서이 작업을 수행하는 방법에 대한 지침을 찾지 못했습니다.


@Dofs, Zack 내 대답을 볼 기회가 있었습니까? 당신에게 충분합니까, 아니면 더 깊이 돕고 조사해야합니까?
Sergey Mell

아직. 1 월과 2 월은 내 정규직에서 가장 바쁜시기입니다. 최대한 빨리 알려 드리겠습니다.

답변:


5

네 말이 맞아. 주요 문제점은 jasmine-gem그것이 바벨을 통해 스펙을 파이프하지 않는다는 것입니다. 문제에 대한 가장 빠른 해결책을 게시하고 그 후에 유사한 접근법을 구현할 수 있다고 생각합니다 jasmine-gem.

주요 아이디어는 필요한 모든 바벨 구성이있는 한 레일 웹팩을 통해 사양을 파이프하는 것입니다.

  1. 이 솔루션 jasmine-core에서는 사용하지 않으므로 설치jasmine-gem
    yarn add jasmine-core -D
  2. 이제 두 개의 추가 웹팩 팩을 작성하십시오. 하나는 Jasmine을위한 것이며 Jasmine과 테스트 러너 만 포함합니다.

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

  3. 그런 다음 Jasmine 용 Webpack ProvidePlugin을 추가하십시오 (이 코드를에 추가하십시오 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. 애플리케이션에 Jasmine 러너 페이지 추가

    # 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에 대한 지침을 다시 확인하고 권장 사항에 적절한 변경 사항을 추가하고 이것이 효과가 있음을 증명했습니다.

내 답변이 도움이되었는지 또는 추가 정보가 필요한지 알려주십시오. 그러나 jasminegem 또는 이와 유사한 구현으로 성공할 수있는 솔루션을 연구하겠습니다 .


당신이 뭔가를 테스트하도록 요청할 수 있습니까? 나는이 지침을 따랐다. 재스민은 작동하지만 갑자기 bootstrap.min.js기본적으로 jquery로드되지 않는다는 오류를 던지고있다 bootstrap. 그러나]]이 코드에서 JS로드 순서를 변경하는 것을 찾을 수 없습니다 ... 특히 부트 스트랩이 응용 프로그램 레이아웃에서 CDN을 통해로드 된 후 javascript_pack_tag 'application'라인을 application.js이미 가지고 있기 때문에 이미 있습니다 require('jquery'). 로컬 환경에서이 설정을 사용하는 경우 응용 프로그램 레이아웃에서 CDN을 통해 부트 스트랩을로드하고 작동하는지 확인할 수 있습니까?
제임스

나는 그것을 알아. 3 단계는 jquery 플러그인을 추가 한 코드를 재정의했습니다. 이 답변은 그것을
james
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.