Skip to content

Commit

Permalink
add teaspoon javascript test suite
Browse files Browse the repository at this point in the history
  • Loading branch information
mwitek committed Aug 9, 2013
1 parent 50a465b commit f7fe5ab
Show file tree
Hide file tree
Showing 8 changed files with 174 additions and 0 deletions.
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ gem "cucumber-rails", ">= 1.3.1", :group => :test, :require => false
gem "launchy", ">= 2.2.0", :group => :test
gem "capybara", ">= 2.0.3", :group => :test
gem "factory_girl_rails", ">= 4.2.0", :group => [:development, :test]
gem "teaspoon", ">= 0.7.4", :group => [:development, :test]
gem "bootstrap-sass", ">= 2.3.0.0"
gem "devise", ">= 2.2.3"
gem "cancan", ">= 1.6.9"
Expand Down
14 changes: 14 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -79,20 +79,24 @@ GEM
launchy (~> 2.1)
mail (~> 2.2)
erubis (2.7.0)
eventmachine (1.0.3)
execjs (1.4.0)
multi_json (~> 1.0)
factory_girl (4.2.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.2.1)
factory_girl (~> 4.2.0)
railties (>= 3.0.0)
faye-websocket (0.4.7)
eventmachine (>= 0.12.0)
ffi (1.6.0)
figaro (0.6.3)
bundler (~> 1.0)
rails (>= 3, < 5)
gherkin (2.11.6)
json (>= 1.7.6)
hike (1.2.1)
http_parser.rb (0.5.3)
i18n (0.6.1)
journey (1.0.4)
jquery-rails (2.2.1)
Expand All @@ -109,6 +113,12 @@ GEM
multi_json (1.7.2)
nokogiri (1.5.9)
orm_adapter (0.4.0)
phantomjs (1.8.1.1)
poltergeist
poltergeist (1.1.2)
capybara (~> 2.0.1)
faye-websocket (~> 0.4.4)
http_parser.rb (~> 0.5.3)
polyglot (0.3.3)
quiet_assets (1.0.2)
railties (>= 3.1, < 5.0)
Expand Down Expand Up @@ -177,6 +187,9 @@ GEM
stripe_event (0.6.0)
rails (>= 3.1)
stripe (~> 1.6)
teaspoon (0.7.4)
phantomjs (>= 1.8.1.1)
railties (>= 3.2.5, < 5)
thor (0.18.1)
tilt (1.3.6)
treetop (1.4.12)
Expand Down Expand Up @@ -219,4 +232,5 @@ DEPENDENCIES
sqlite3
stripe (>= 1.7.11)
stripe_event (>= 0.4.0)
teaspoon (>= 0.7.4)
uglifier (>= 1.0.3)
64 changes: 64 additions & 0 deletions config/initializers/teaspoon.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
Teaspoon.setup do |config|

# This determines where the Teaspoon routes will be mounted. Changing this to "/jasmine" would allow you to browse to
# http://localhost:3000/jasmine to run your specs.
config.mount_at = "/javascript_test"

# This defaults to Rails.root if left nil. If you're testing an engine using a dummy application it can be useful to
# set this to your engines root.. E.g. `Teaspoon::Engine.root`
config.root = nil

# These paths are appended to the Rails assets paths (relative to config.root), and by default is an array that you
# can replace or add to.
config.asset_paths = ["spec/javascripts", "spec/javascripts/stylesheets"]

# Fixtures are rendered through a standard controller. This means you can use things like HAML or RABL/JBuilder, etc.
# to generate fixtures within this path.
config.fixture_path = "spec/javascripts/fixtures"

# You can modify the default suite configuration and create new suites here. Suites can be isolated from one another.
# When defining a suite you can provide a name and a block. If the name is left blank, :default is assumed. You can
# omit various directives and the defaults will be used.
#
# To run a specific suite
# - in the browser: http://localhost/teaspoon/[suite_name]
# - from the command line: rake teaspoon suite=[suite_name]
config.suite do |suite|

# You can specify a file matcher and all matching files will be loaded when the suite is run. It's important that
# these files are serve-able from sprockets.
#
# Note: Can also be set to nil.
suite.matcher = "{spec/javascripts,app/assets}/**/*_spec.{js,js.coffee,coffee}"

# Each suite can load a different helper, which can in turn require additional files. This file is loaded before
# your specs are loaded, and can be used as a manifest.
suite.helper = "spec_helper"

# These are the core Teaspoon javascripts. It's strongly encouraged to include only the base files here. You can
# require other support libraries in your spec helper, which allows you to change them without having to restart the
# server.
#
# Available frameworks: teaspoon-jasmine, teaspoon-mocha, teaspoon-qunit
#
# Note: To use the CoffeeScript source files use `"teaspoon/mocha"` etc.
suite.javascripts = ["teaspoon-mocha"]

# If you want to change how Teaspoon looks, or include your own stylesheets you can do that here. The default is the
# stylesheet for the HTML reporter.
suite.stylesheets = ["teaspoon"]

# When running coverage reports, you probably want to exclude libraries that you're not testing.
# Accepts an array of filenames or regular expressions. The default is to exclude assets from vendors or gems.
suite.no_coverage = [%r{/lib/ruby/gems/}, %r{/vendor/assets/}, %r{/support/}, %r{/(.+)_helper.}]
# suite.no_coverage << "jquery.min.js" # excludes jquery from coverage reports

end

# Example suite. Since we're just filtering to files already within the root spec/javascripts, these files will also
# be run in the default suite -- but can be focused into a more specific suite.
#config.suite :targeted do |suite|
# suite.matcher = "spec/javascripts/targeted/*_spec.{js,js.coffee,coffee}"
#end

end if defined?(Teaspoon) && Teaspoon.respond_to?(:setup) # let Teaspoon be undefined outside of development/test/asset groups
16 changes: 16 additions & 0 deletions lib/tasks/spec.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
require 'rake/testtask'
require "teaspoon/console"

namespace 'spec' do
desc "Run the javascript test"
task :javascript => :environment do
puts "\n\n===== Starting Javascript Test =====\n\n"
fail if Teaspoon::Console.new({suite: ENV["suite"]}).execute
puts "===== Javascript Test Complete =====\n\n\n"
end
end

Rake::TestTask.new(:default => "spec:javascript") do |test|
test.pattern = 'spec/javascript/*_test.rb'
test.verbose = true
end
14 changes: 14 additions & 0 deletions spec/javascripts/chai_spec.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
foobar =
sayHello: ->
return 'Hello World!'

describe "Foobar", ->
describe "#sayHello()", ->
it "should work with assert", ->
assert.equal foobar.sayHello(), 'Hello World!'

it "should work with expect", ->
expect(foobar.sayHello()).to.equal('Hello World!')

it "should work with should", ->
foobar.sayHello().should.equal('Hello World!')
29 changes: 29 additions & 0 deletions spec/javascripts/spec_helper.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Teaspoon includes some support files, but you can use anything from your own support path too.
# require support/expect
# require support/sinon
# require support/your-support-file
#
# Deferring execution
# If you're using CommonJS, RequireJS or some other asynchronous library you can defer execution. Call Teaspoon.execute()
# after everything has been loaded. Simple example of a timeout:
#
# Teaspoon.defer = true
# setTimeout(Teaspoon.execute, 1000)
#
# Matching files
# By default Teaspoon will look for files that match _spec.{js,js.coffee,.coffee}. Add a filename_spec.js file in your
# spec path and it'll be included in the default suite automatically. If you want to customize suites, check out the
# configuration in config/initializers/teaspoon.rb
#
# Manifest
# If you'd rather require your spec files manually (to control order for instance) you can disable the suite matcher in
# the configuration and use this file as a manifest.
#
# For more information: http://github.com/modeset/teaspoon
#
# You can require javascript files here. A good place to start is by requiring your application.js.

#= require application
#= require support/sinon
#= require support/chai
#= require support/chai_helper.js
3 changes: 3 additions & 0 deletions spec/javascripts/support/chai_helper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
var assert = chai.assert,
expect = chai.expect,
should = chai.should();
33 changes: 33 additions & 0 deletions spec/teaspoon_env.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# This file allows you to override various Teaspoon configuration directives when running from the command line. It is not
# required from within the Rails environment, so overriding directives that have been defined within the initializer
# is not possible.
#
# Set RAILS_ROOT and load the environment.
ENV["RAILS_ROOT"] = File.expand_path("../../", __FILE__)
require File.expand_path("../../config/environment", __FILE__)

# Provide default configuration.
#
# You can override various configuration directives defined here by using arguments with the teaspoon command.
#
# teaspoon --driver=selenium --suppress-log
# rake teaspoon DRIVER=selenium SUPPRESS_LOG=false
Teaspoon.setup do |config|
# Driver / Server
#config.driver = "phantomjs" # available: phantomjs, selenium
#config.server = nil # defaults to Rack::Server

# Behaviors
#config.server_timeout = 20 # timeout for starting the server
#config.server_port = nil # defaults to any open port unless specified
#config.fail_fast = true # abort after the first failing suite

# Output
#config.formatters = "dot" # available: dot, tap, tap_y, swayze_or_oprah
#config.suppress_log = false # suppress logs coming from console[log/error/debug]
#config.color = true

# Coverage (requires istanbul -- https://github.com/gotwarlost/istanbul)
#config.coverage = true
#config.coverage_reports = "text,html,cobertura"
end

0 comments on commit f7fe5ab

Please sign in to comment.