2

Rails プラグイン/gem を作成しています。これは基本的にいくつかのヘルパー (FormHelpers、FormTagHelpers) と、動作を追加するための関連する Javascript です。

タグ ヘルパーを RSpec でテストしています。そして今、Jasmine をセットアップして Javascript の動作をテストしています。

静的 (壊れやすい) フィクスチャを使用する代わりに、プラグインのタグ ヘルパー コードから Jasmine フィクスチャを生成したいと考えています。したがって、タグ コードが変更されると、Jasmine テストのフィクスチャが自動的に更新されます。

私が最初に考えたのは、「it_should_behave_like」の共有動作のようなもので RSpec を拡張することでした。それは「it_should_save_fixture_on_success」だけです。after(:all) ブロックのようなものになります。

私が知る必要がある2つのこと...コンテキストの「タイトル」(フィクスチャのデフォルト名)を取得する方法と、after(:all)ですべての仕様を決定する方法正常に実行されました。

それは合理的に聞こえますか?または、明らかな何かを見逃しましたか?

4

2 に答える 2

2

私はジャスミンのために同じようなことをしました。いくつかのHAMLテンプレートをHTMLにコンパイルし、それらをJasmineのフィクスチャパスに配置するRakeタスクを作成しました。次に、Rakeタスクを依存関係として設定し、jasmine:ciタスクの前に実行されるようにしました。これが私が書いたRakeタスクです:

namespace :dom do                                                                                                                                           
  namespace :fixtures do
    target_path   = "spec/javascripts/fixtures"
    template_path = "spec/javascripts/templates"

    task :compile do
      view_paths  = ActionController::Base.view_paths
      view_paths  << template_path

      view = ActionView::Base.new(view_paths, {}) 

      Dir.glob File.join(template_path, '*') do |path|
        template  = File.basename(path)
        template  = template.slice(0...template.index('.')) if template.index('.')
        target    = File.join(target_path, template) + ".html"

        puts "Rendering fixture '#{template}' to #{target}"

        File.open(target, 'w') do |f| 
          f.write view.render(:file => template, :layout => false)
        end 
      end 
    end 

    task :clean do
      Dir.glob File.join(target_path, '*') do |path|
        File.delete path
      end 
    end 
  end 
end

namespace :spec do
  desc "Run specs in spec/javascripts"
  task :javascripts => ['dom:fixtures:compile', 'jasmine:ci']
end

これにより、HAMLまたはERBテンプレートをで記述できspec/javascript/templates、それらはにコンパイルされspec/javascript/fixtures、Jasmineによってロードできます。この行view_paths = ActionController::Base.view_pathsにより、アプリケーションのパーシャルがのテンプレートで使用できるようになりますspec/javascript/templates。ヘルパーも利用できるようにするには、おそらくこの例を微調整する必要があります。最後に、これはRails2.3アプリケーションからのものであることを述べておきます。Rails3.xではまだ試していません。これがお役に立てば幸いです。

于 2011-09-15T15:53:31.893 に答える