added jasmine
This commit is contained in:
commit
751256aa59
22
public/javascripts/Player.js
Normal file
22
public/javascripts/Player.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
function Player() {
|
||||||
|
}
|
||||||
|
Player.prototype.play = function(song) {
|
||||||
|
this.currentlyPlayingSong = song;
|
||||||
|
this.isPlaying = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
Player.prototype.pause = function() {
|
||||||
|
this.isPlaying = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
Player.prototype.resume = function() {
|
||||||
|
if (this.isPlaying) {
|
||||||
|
throw new Error("song is already playing");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.isPlaying = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
Player.prototype.makeFavorite = function() {
|
||||||
|
this.currentlyPlayingSong.persistFavoriteStatus(true);
|
||||||
|
};
|
7
public/javascripts/Song.js
Normal file
7
public/javascripts/Song.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
function Song() {
|
||||||
|
}
|
||||||
|
|
||||||
|
Song.prototype.persistFavoriteStatus = function(value) {
|
||||||
|
// something complicated
|
||||||
|
throw new Error("not yet implemented");
|
||||||
|
};
|
58
spec/javascripts/PlayerSpec.js
Normal file
58
spec/javascripts/PlayerSpec.js
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
describe("Player", function() {
|
||||||
|
var player;
|
||||||
|
var song;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
player = new Player();
|
||||||
|
song = new Song();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be able to play a Song", function() {
|
||||||
|
player.play(song);
|
||||||
|
expect(player.currentlyPlayingSong).toEqual(song);
|
||||||
|
|
||||||
|
//demonstrates use of custom matcher
|
||||||
|
expect(player).toBePlaying(song);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("when song has been paused", function() {
|
||||||
|
beforeEach(function() {
|
||||||
|
player.play(song);
|
||||||
|
player.pause();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should indicate that the song is currently paused", function() {
|
||||||
|
expect(player.isPlaying).toBeFalsy();
|
||||||
|
|
||||||
|
// demonstrates use of 'not' with a custom matcher
|
||||||
|
expect(player).not.toBePlaying(song);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be possible to resume", function() {
|
||||||
|
player.resume();
|
||||||
|
expect(player.isPlaying).toBeTruthy();
|
||||||
|
expect(player.currentlyPlayingSong).toEqual(song);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// demonstrates use of spies to intercept and test method calls
|
||||||
|
it("tells the current song if the user has made it a favorite", function() {
|
||||||
|
spyOn(song, 'persistFavoriteStatus');
|
||||||
|
|
||||||
|
player.play(song);
|
||||||
|
player.makeFavorite();
|
||||||
|
|
||||||
|
expect(song.persistFavoriteStatus).toHaveBeenCalledWith(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
//demonstrates use of expected exceptions
|
||||||
|
describe("#resume", function() {
|
||||||
|
it("should throw an exception if song is already playing", function() {
|
||||||
|
player.play(song);
|
||||||
|
|
||||||
|
expect(function() {
|
||||||
|
player.resume();
|
||||||
|
}).toThrow("song is already playing");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
9
spec/javascripts/helpers/SpecHelper.js
Normal file
9
spec/javascripts/helpers/SpecHelper.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
beforeEach(function() {
|
||||||
|
this.addMatchers({
|
||||||
|
toBePlaying: function(expectedSong) {
|
||||||
|
var player = this.actual;
|
||||||
|
return player.currentlyPlayingSong === expectedSong
|
||||||
|
&& player.isPlaying;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
73
spec/javascripts/support/jasmine.yml
Normal file
73
spec/javascripts/support/jasmine.yml
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
# src_files
|
||||||
|
#
|
||||||
|
# Return an array of filepaths relative to src_dir to include before jasmine specs.
|
||||||
|
# Default: []
|
||||||
|
#
|
||||||
|
# EXAMPLE:
|
||||||
|
#
|
||||||
|
# src_files:
|
||||||
|
# - lib/source1.js
|
||||||
|
# - lib/source2.js
|
||||||
|
# - dist/**/*.js
|
||||||
|
#
|
||||||
|
src_files:
|
||||||
|
- public/javascripts/**/*.js
|
||||||
|
|
||||||
|
# stylesheets
|
||||||
|
#
|
||||||
|
# Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
|
||||||
|
# Default: []
|
||||||
|
#
|
||||||
|
# EXAMPLE:
|
||||||
|
#
|
||||||
|
# stylesheets:
|
||||||
|
# - css/style.css
|
||||||
|
# - stylesheets/*.css
|
||||||
|
#
|
||||||
|
stylesheets:
|
||||||
|
|
||||||
|
# helpers
|
||||||
|
#
|
||||||
|
# Return an array of filepaths relative to spec_dir to include before jasmine specs.
|
||||||
|
# Default: ["helpers/**/*.js"]
|
||||||
|
#
|
||||||
|
# EXAMPLE:
|
||||||
|
#
|
||||||
|
# helpers:
|
||||||
|
# - helpers/**/*.js
|
||||||
|
#
|
||||||
|
helpers:
|
||||||
|
|
||||||
|
# spec_files
|
||||||
|
#
|
||||||
|
# Return an array of filepaths relative to spec_dir to include.
|
||||||
|
# Default: ["**/*[sS]pec.js"]
|
||||||
|
#
|
||||||
|
# EXAMPLE:
|
||||||
|
#
|
||||||
|
# spec_files:
|
||||||
|
# - **/*[sS]pec.js
|
||||||
|
#
|
||||||
|
spec_files:
|
||||||
|
|
||||||
|
# src_dir
|
||||||
|
#
|
||||||
|
# Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
|
||||||
|
# Default: project root
|
||||||
|
#
|
||||||
|
# EXAMPLE:
|
||||||
|
#
|
||||||
|
# src_dir: public
|
||||||
|
#
|
||||||
|
src_dir:
|
||||||
|
|
||||||
|
# spec_dir
|
||||||
|
#
|
||||||
|
# Spec directory path. Your spec_files must be returned relative to this path.
|
||||||
|
# Default: spec/javascripts
|
||||||
|
#
|
||||||
|
# EXAMPLE:
|
||||||
|
#
|
||||||
|
# spec_dir: spec/javascripts
|
||||||
|
#
|
||||||
|
spec_dir:
|
21
spec/javascripts/support/jasmine_runner.rb
Normal file
21
spec/javascripts/support/jasmine_runner.rb
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
$:.unshift(ENV['JASMINE_GEM_PATH']) if ENV['JASMINE_GEM_PATH'] # for gem testing purposes
|
||||||
|
|
||||||
|
require 'rubygems'
|
||||||
|
require 'jasmine'
|
||||||
|
jasmine_config_overrides = File.expand_path(File.join(File.dirname(__FILE__), 'jasmine_config.rb'))
|
||||||
|
require jasmine_config_overrides if File.exists?(jasmine_config_overrides)
|
||||||
|
|
||||||
|
jasmine_config = Jasmine::Config.new
|
||||||
|
spec_builder = Jasmine::SpecBuilder.new(jasmine_config)
|
||||||
|
|
||||||
|
should_stop = false
|
||||||
|
|
||||||
|
Spec::Runner.configure do |config|
|
||||||
|
config.after(:suite) do
|
||||||
|
spec_builder.stop if should_stop
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
spec_builder.start
|
||||||
|
should_stop = true
|
||||||
|
spec_builder.declare_suites
|
Loading…
Reference in New Issue
Block a user