Skip to content
This repository was archived by the owner on Sep 2, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
language: ruby
sudo: false

cache: bundler

bundler_args: --no-deployment --binstubs=./bin

before_install:
- "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc"
- gem install bundler
- gem update bundler

install:
- bundle install --path vendor/bundle

script:
- echo $BUNDLE_GEMFILE
- bundle exec rake
rvm:
- 2.2.5
- 2.3.1
- 2.3.2
- 2.3.3
- 2.4.0
notifications:
email: false
20 changes: 20 additions & 0 deletions Appraisals
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@

appraise "rails-4.0.0" do
gem "rails", "4.0.0"
end

appraise "rails-4.1.1" do
gem "rails", "4.1.1"
end

appraise "rails-4.2.0" do
gem "rails", "4.2.0"
end

appraise "jasmine-1.1.0" do
gem "jasmine", "1.1.0"
end

appraise "jasmine-2.5.2" do
gem "jasmine", "2.5.2"
end
8 changes: 8 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,11 @@ source "http://rubygems.org"

# Specify your gem's dependencies in jasminerice-runner.gemspec
gemspec

if RUBY_VERSION >= '2.2.0'
gem 'rack', '>= 1.0', '>= 1.0'
gem 'activesupport', '>= 4.0', '>= 4.0'
else
gem 'rack', '~> 1', '< 2.0'
gem 'activesupport', '~> 4', '< 5.0'
end
86 changes: 77 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,94 @@ jasminerice-runner

Uses capybara to run jasmine specs with jasminerice and rails asset pipeline

Requirements
------------

1. [capybara >= 2.0](https://github.com/celluloid/celluloid)
2. [jasminerice >= 0.0.10](https://github.com/jwo/celluloid-pmap)
3. [jasmine >= 1.1](https://github.com/bogdanRada/celluloid_pubsub)
4. [nokogiri >= 1.6](https://github.com/swoop-inc/composable_state_machine)
5. [colorize >= 0.8](https://github.com/tj/terminal-table)
6. [coffee-script >= 2.0](https://github.com/fazibear/colorize)

Compatibility
-------------

Rails 4.0 or greater ( currently this was tested only with Rails), but i can accept pull requests for other rack-based applications
[MRI >= 2.0](http://www.ruby-lang.org)

Rubinius, Jruby, MRI 1.8, MRI 1.9 are not officially supported.

Installation Instructions
-------------------------

Add it to your Gemfile
```ruby
gem "jasminerice-runner"
```
Usage
-----

Add it to your Gemfile
For Jasmine <2.0 add this to your spec.js:

gem "jasminerice-runner"

Add this to your spec.js:
```coffee
#= require jasminerice_runner_base
#= require jasminerice_legacy_reporter
```

For Jasmine > 2.0 add this to your spec.js:

```coffee
#= require jasminerice_runner_base
#= require jasminerice_reporter

```


Then, run the rake task

```sh
rake jasminerice:run
```
To switch drivers, in a config/initializer

Jasminerice::Runner.capybara_driver = :webkit

Default driver is :selenium
```ruby
Jasminerice::Runner.configure do |config|
# you can use any other driver (phantomjs, or other drivers)
config.capybara_driver = :webkit

# For Jasmine < 2.0, this gem also provides a Junit XML formatter ( for Jasmine > 2.0 this will have no effect )
# If you want to enable the JUNIT XML Formatter you need to specify `:junit_xml`
# By Default this is set to nil, however if the environment variable CI is present and has as value 'true',
# and you are using Jasmine < 2.0, this will be automatically set to :junit_xml
# unless of course this is not overidden in a initializer
config.formatters = nil

# For Jasmine < 2.0, this gem also provides a Junit XML formatter ( for Jasmine > 2.0 this will have no effect )
config.junit_xml_path = File.join(Dir.pwd, 'spec', 'reports')
end
```


**Default driver is :selenium***


Using other formatters for Jasmine > 2.0
-----------------------------------

Starting with version 2.0 , Jasmine supports custom formatters by using this configuration:


```ruby

Jasmine.configure do |config|
config.formatters << Jasmine::Formatters::JunitXml
end
```

Put this configuration in a file located in **config/initializers**.

But in order for this to work , you will have to add the gem **jasmine_junitxml_formatter** to your Gemfile


Using Multiple Jasmine Environments
-----------------------------------
Expand Down
24 changes: 23 additions & 1 deletion Rakefile
Original file line number Diff line number Diff line change
@@ -1 +1,23 @@
require "bundler/gem_tasks"
require 'bundler/setup'
require 'bundler/gem_tasks'
require 'appraisal'
require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new(:spec) do |spec|
default_options = ['--colour']
default_options.concat(['--backtrace', '--fail-fast']) if ENV['DEBUG']
spec.rspec_opts = default_options
spec.verbose = true
end

desc 'Default: run the unit tests.'
task default: [:all]

desc 'Test the plugin under all supported Rails versions.'
task :all do |_t|
if ENV['TRAVIS']
exec(' bundle exec appraisal install && bundle exec rake appraisal spec')
else
exec('bundle exec appraisal install && bundle exec rake appraisal spec')
end
end
62 changes: 62 additions & 0 deletions app/assets/javascripts/jasminerice_legacy_reporter.js.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#= require ./jasminerice_runner_base
class JasminericeLegacyReporter extends window.JasminericeRunnerBase
constructor : ->
super

reportRunnerStarting: (runner) ->
super(runner)

reportRunnerResults: (runner) ->
@finished = true

reportSpecResults: (spec) ->
spec_result = if spec.results().failedCount > 0 then "failed" else "passed"
spec_id = spec.id
@totalCount++
@results_[spec_id] = {
'status': spec_result
'messages': spec.results().getItems(),
'id': spec_id,
'description': spec.description,
'suite': spec.suite,
'full_name': spec.getFullName()
}
@final_results_[spec_id] = @.summarizeResult_(spec, @results_[spec_id])
if spec_result == 'failed'
@failedCount++
@failedSpecs.push(@final_results_[spec_id])

resultsForSpecs : (specIds) ->
results = {}
for i in [0...specIds.length]
specId = specIds[i]
results[specId] = @.summarizeResult_(specIds[i], @results_[specId])
results

summarizeResult_ : (spec, result) ->
summaryMessages = []
for messageIndex in [0...result.messages.length]
resultMessage = result.messages[messageIndex]
summaryMessages.push({
'status': if resultMessage.passed then resultMessage.passed() else true,
'message': resultMessage.message,
'matcherName': resultMessage.matcherName,
'expected': ''+resultMessage.expected,
'actual': ''+resultMessage.actual,
'trace': {
'stack': if resultMessage.passed && !resultMessage.passed() then resultMessage.trace.stack else jasmine.undefined
}
})
{
'id': result.id,
'status': result.status
'name': result.full_name,
'description': result.description
'messages': summaryMessages,
'suite_name': @.getFullDescOfSuite(result.suite),
}

# make sure this exists so we don't have timing issue
# when capybara hits us before the onload function has run
window.jasmineRiceReporter = new JasminericeLegacyReporter()
window.jasmineRiceReporter.register()
69 changes: 69 additions & 0 deletions app/assets/javascripts/jasminerice_reporter.js.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#= require ./jasminerice_runner_base
class JasminericeReporter extends window.JasminericeRunnerBase
constructor : ->
super
@runner_results = []

jasmineStarted: (suiteInfo) ->
@started = true
@failedSpecs = []
@totalCount = 0
@failedCount = 0
#@.log('Running suite with ' + suiteInfo.totalSpecsDefined)

suiteStarted: (result) ->
@suites_[suite.id] = @.summarize_(result)
#@.log('Suite started: ' + result.description + ' whose full description is: ' + result.fullName)

specStarted: (result) ->
#@.log('Spec started: ' + result.description + ' whose full description is: ' + result.fullName)

specDone: (spec) ->
spec_result = if spec.failedExpectations.length > 0 then "failed" else "passed"
spec_id = spec.id
@totalCount++
@results_[spec_id] = {
'status': spec_result
'messages': spec.failedExpectations,
'id': spec_id,
'description': spec.description,
'full_name': spec.fullName
}
@final_results_[spec_id] = @.summarizeResult_(spec, @results_[spec_id])
if spec_result == 'failed'
@failedCount++
@failedSpecs.push(@final_results_[spec_id])

summarizeResult_ : (spec, result) ->
summaryMessages = []
for messageIndex in [0...result.messages.length]
resultMessage = result.messages[messageIndex]
summaryMessages.push({
'status': result.status,
'message': resultMessage.message,
'matcherName': resultMessage.matcherName,
'expected': ''+resultMessage.expected,
'actual': ''+resultMessage.actual,
'trace': {
'stack': if !resultMessage.passed then resultMessage.stack else jasmine.undefined
}
})
{
'id': result.id,
'status': result.status
'name': result.full_name,
'description': result.description
'messages': summaryMessages,
}

suiteDone: (result) ->
#The result here is the same object as in suiteStarted but with the addition of a status and a list of failedExpectations.
@.log('Suite: ' + result.description + ' was ' + result.status);

jasmineDone: ->
@finished = true

# make sure this exists so we don't have timing issue
# when capybara hits us before the onload function has run
window.jasmineRiceReporter = new JasminericeReporter()
window.jasmineRiceReporter.register()
Loading