ruby_gem.rb |
|
---|---|
Using jasmine with rubyThe jasmine gem can be use both with and without Rails. |
|
Add the jasmine gem to your gemfile and |
gem 'jasmine'
|
SetupTo install a default jasmine.yml and a sample jasmine_helper.rb |
|
If your project is using Rails, jasmine has generators you can use to get everything set up. |
rails g jasmine:install
|
If your project doesn’t use Rails, all of these commands also exist in the command line tool |
jasmine init
|
Jasmine also has some example specs, with implementation, that you can install. |
rails g jasmine:examples
jasmine examples
|
UseOnce you’ve installed your |
|
If you want to start a server that continues to run so you can point a browser at it |
rake jasmine
|
For use on your CI server |
rake jasmine:ci
|
ConfigurationPrimary configuration is done in |
|
The |
Jasmine.configure do |config|
|
You can add rack handlers for specific urls |
config.add_rack_path '/something' do
[200]
end
|
And mount other rack applications |
config.add_rack_app MyRackApp
|
You can configure the port that the |
config.server_port = 12345
|
You can configure the port that the |
config.ci_port = 54321
|
You can add custom formatters |
config.formatters << My::Custom::Formatter
|
You can use a custom runner
The |
config.runner = lambda { |formatter, server_url| My::Custom::Runner.new(formatter, server_url, 100) }
end
|
Configuring the default phantomjs runnerThe phantomjs runner supports some additional options. If you want to see the output from |
show_console_log: true
|
If you need to configure the phantomjs webpage object, you can specify a config script. |
phantom_config_script: 'relative/path/from/project/root.js'
|
This file will be |
exports.configure = function(page) {
page.viewportSize = {
width: 340,
height: 220
};
};
|
Custom Formatters |
|
Your custom formatter must implement 2 methods, |
class My::Custom::Formatter
|
|
def format(results)
results.each do |result|
puts result.status
end
end
|
|
def done
puts 'Done running tests'
end
end
|
Custom Runners |
|
Once constructed, a runner only needs to implement a |
class My::Custom::Runner
def initialize(formatter, jasmine_server_url, result_batch_size)
|
The formatter passed in is responsible for making sure all configured formatters receive the same messages. |
@formatter = formatter
|
The |
@jasmine_server_url = jasmine_server_url
@result_batch_size = result_batch_size
end
|
|
def run
|
Here we’re using Phantom to load the page and run the specs |
command = "#{Phantomjs.path} 'phantom_jasmine_run.js' #{@jasmine_server_url} #{@result_batch_size}"
IO.popen(command) do |output|
|
The |
output.each do |line|
raw_results = JSON.parse(line, :max_nesting => false)
|
Formatters expect to get |
results = raw_results.map { |r| Result.new(r) }
@formatter.format(results)
end
end
|
When the tests have finished, call |
@formatter.done
end
|
If the runner needs some javascript to be loaded into the page as part of the load, it returns the full path in |
def boot_js
File.expand_path('runner_boot.js', __FILE__)
end
end
|