diff --git a/lib/guard/jasmine-headless-webkit.rb b/lib/guard/jasmine-headless-webkit.rb index 60bcd38..c3620c2 100644 --- a/lib/guard/jasmine-headless-webkit.rb +++ b/lib/guard/jasmine-headless-webkit.rb @@ -22,15 +22,15 @@ module Guard def run_all UI.info "Guard::JasmineHeadlessWebkit running all specs..." - JasmineHeadlessWebkitRunner.run if run_before and run_jammit - @ran_jammit = false + JasmineHeadlessWebkitRunner.run if run_before and run_rails_assets and run_jammit + @ran_before = false end def run_on_change(paths) paths = filter_paths(paths) - @ran_jammit = false - if run_before and run_jammit - @ran_jammit = true + @ran_before = false + if run_before and run_rails_assets and run_jammit + @ran_before = true if !paths.empty? UI.info "Guard::JasmineHeadlessWebkit running the following: #{paths.join(' ')}" JasmineHeadlessWebkitRunner.run(paths) @@ -50,16 +50,20 @@ module Guard end def run_before - if @options[:run_before] - run_program(@options[:run_before]) - else - true - end + run_a_thing_before(:run_before, @options[:run_before]) end def run_jammit - if @options[:jammit] && !@ran_jammit - run_program("Jammit", %{jammit -f 2>/dev/null}) + run_a_thing_before(:jammit, "Jammit", %{jammit -f 2>/dev/null}) + end + + def run_rails_assets + run_a_thing_before(:rails_assets, "Rails Assets", %{rake assets:precompile:for_testing}) + end + + def run_a_thing_before(option, *args) + if @options[option] && !@ran_before + run_program(*args) else true end diff --git a/spec/lib/guard/jasmine-headless-webkit_spec.rb b/spec/lib/guard/jasmine-headless-webkit_spec.rb index 070ab00..b2b2d98 100644 --- a/spec/lib/guard/jasmine-headless-webkit_spec.rb +++ b/spec/lib/guard/jasmine-headless-webkit_spec.rb @@ -97,7 +97,7 @@ describe Guard::JasmineHeadlessWebkit do describe 'run jammit first' do context 'run on run_all if called first' do before do - guard.expects(:run_program).once.returns(true) + guard.expects(:run_program).once.with('Jammit', regexp_matches(/jammit/)).returns(true) Guard::JasmineHeadlessWebkitRunner.expects(:run).once end @@ -110,7 +110,7 @@ describe Guard::JasmineHeadlessWebkit do context 'only run once if run_on_change is successful' do before do - guard.expects(:run_program).once.returns(true) + guard.expects(:run_program).once.with('Jammit', regexp_matches(/jammit/)).returns(true) Guard::JasmineHeadlessWebkitRunner.expects(:run).once.returns(0) end @@ -121,4 +121,32 @@ describe Guard::JasmineHeadlessWebkit do end end end + + describe 'run rails_assets first' do + context 'run on run_all if called first' do + before do + guard.expects(:run_program).with('Rails Assets', regexp_matches(/assets:precompile:for_testing/)).once.returns(true) + Guard::JasmineHeadlessWebkitRunner.expects(:run).once + end + + let(:options) { { :rails_assets => true } } + + it "should run rails assets first" do + guard.run_all + end + end + + context 'only run once if run_on_change is successful' do + before do + guard.expects(:run_program).with('Rails Assets', regexp_matches(/assets:precompile:for_testing/)).once.returns(true) + Guard::JasmineHeadlessWebkitRunner.expects(:run).once.returns(0) + end + + let(:options) { { :rails_assets => true } } + + it "should run rails assets only once" do + guard.run_on_change(%w{path.js}) + end + end + end end