jasminerice 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/README.md +5 -3
- data/app/assets/javascripts/jasminerice.js.coffee +1 -0
- data/app/controllers/jasminerice/spec_controller.rb +6 -1
- data/app/views/jasminerice/spec/index.html.haml +1 -6
- data/config/routes.rb +5 -1
- data/jasminerice.gemspec +1 -1
- data/vendor/assets/javascripts/jasmine-jquery-1.2.0.js +256 -0
- metadata +3 -3
- data/app/views/layouts/jasminerice/application.html.erb +0 -14
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -14,9 +14,11 @@ your Gemfile so
|
|
14
14
|
|
15
15
|
gem "jasminerice"
|
16
16
|
|
17
|
-
Now add a route to the end of your config.routes
|
17
|
+
Now add a route to the end of your config.routes but only for development and test
|
18
18
|
|
19
|
-
|
19
|
+
if ["development", "test"].include? Rails.env
|
20
|
+
mount Jasminerice::Engine => "/jasmine"
|
21
|
+
end
|
20
22
|
|
21
23
|
Create a single file called
|
22
24
|
|
@@ -65,7 +67,7 @@ Now start your server
|
|
65
67
|
|
66
68
|
Goto
|
67
69
|
|
68
|
-
http://localhost:3000/
|
70
|
+
http://localhost:3000/jasmine
|
69
71
|
|
70
72
|
and there are your specs.
|
71
73
|
|
@@ -1,13 +1,8 @@
|
|
1
|
-
!!!
|
2
1
|
%html
|
3
2
|
%head
|
4
3
|
%title Jasmine Spec Runner
|
5
|
-
|
6
4
|
= stylesheet_link_tag "jasmine"
|
7
5
|
= javascript_include_tag "jasminerice", :debug => Rails.env.development?
|
8
6
|
= javascript_include_tag "spec", :debug => Rails.env.development?
|
9
|
-
|
10
|
-
|
11
|
-
/ include source files here...
|
7
|
+
= csrf_meta_tags
|
12
8
|
%body
|
13
|
-
|
data/config/routes.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
Jasminerice::Engine.routes.draw do
|
2
|
-
resources :spec, :controller => 'spec'
|
2
|
+
resources :spec, :controller => 'spec', :only => [:index] do
|
3
|
+
get "fixtures/:filename", :action => :fixtures
|
4
|
+
end
|
5
|
+
match "fixtures/:filename", :to => "spec#fixtures#:filename"
|
6
|
+
|
3
7
|
root :to => "spec#index"
|
4
8
|
end
|
data/jasminerice.gemspec
CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.description = "Full support for the Rails 3.1 asset pipeline when bdd'ing your coffeescript or javascript using jasmine"
|
7
7
|
s.files = `git ls-files`.split "\n"
|
8
8
|
s.authors = ["Brad Phelan"]
|
9
|
-
s.version = "0.0.
|
9
|
+
s.version = "0.0.5"
|
10
10
|
s.platform = Gem::Platform::RUBY
|
11
11
|
s.add_dependency( 'haml' )
|
12
12
|
end
|
@@ -0,0 +1,256 @@
|
|
1
|
+
var readFixtures = function() {
|
2
|
+
return jasmine.getFixtures().proxyCallTo_('read', arguments);
|
3
|
+
};
|
4
|
+
|
5
|
+
var loadFixtures = function() {
|
6
|
+
jasmine.getFixtures().proxyCallTo_('load', arguments);
|
7
|
+
};
|
8
|
+
|
9
|
+
var setFixtures = function(html) {
|
10
|
+
jasmine.getFixtures().set(html);
|
11
|
+
};
|
12
|
+
|
13
|
+
var sandbox = function(attributes) {
|
14
|
+
return jasmine.getFixtures().sandbox(attributes);
|
15
|
+
};
|
16
|
+
|
17
|
+
var spyOnEvent = function(selector, eventName) {
|
18
|
+
jasmine.JQuery.events.spyOn(selector, eventName);
|
19
|
+
}
|
20
|
+
|
21
|
+
jasmine.getFixtures = function() {
|
22
|
+
return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures();
|
23
|
+
};
|
24
|
+
|
25
|
+
jasmine.Fixtures = function() {
|
26
|
+
this.containerId = 'jasmine-fixtures';
|
27
|
+
this.fixturesCache_ = {};
|
28
|
+
// Changed in jasminerice to support the normal path
|
29
|
+
//this.fixturesPath = 'spec/javascripts/fixtures';
|
30
|
+
this.fixturesPath = 'jasmine/fixtures';
|
31
|
+
};
|
32
|
+
|
33
|
+
jasmine.Fixtures.prototype.set = function(html) {
|
34
|
+
this.cleanUp();
|
35
|
+
this.createContainer_(html);
|
36
|
+
};
|
37
|
+
|
38
|
+
jasmine.Fixtures.prototype.load = function() {
|
39
|
+
this.cleanUp();
|
40
|
+
this.createContainer_(this.read.apply(this, arguments));
|
41
|
+
};
|
42
|
+
|
43
|
+
jasmine.Fixtures.prototype.read = function() {
|
44
|
+
var htmlChunks = [];
|
45
|
+
|
46
|
+
var fixtureUrls = arguments;
|
47
|
+
for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
|
48
|
+
htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex]));
|
49
|
+
}
|
50
|
+
|
51
|
+
return htmlChunks.join('');
|
52
|
+
};
|
53
|
+
|
54
|
+
jasmine.Fixtures.prototype.clearCache = function() {
|
55
|
+
this.fixturesCache_ = {};
|
56
|
+
};
|
57
|
+
|
58
|
+
jasmine.Fixtures.prototype.cleanUp = function() {
|
59
|
+
$('#' + this.containerId).remove();
|
60
|
+
};
|
61
|
+
|
62
|
+
jasmine.Fixtures.prototype.sandbox = function(attributes) {
|
63
|
+
var attributesToSet = attributes || {};
|
64
|
+
return $('<div id="sandbox" />').attr(attributesToSet);
|
65
|
+
};
|
66
|
+
|
67
|
+
jasmine.Fixtures.prototype.createContainer_ = function(html) {
|
68
|
+
var container = $('<div id="' + this.containerId + '" />');
|
69
|
+
container.html(html);
|
70
|
+
$('body').append(container);
|
71
|
+
};
|
72
|
+
|
73
|
+
jasmine.Fixtures.prototype.getFixtureHtml_ = function(url) {
|
74
|
+
if (typeof this.fixturesCache_[url] == 'undefined') {
|
75
|
+
this.loadFixtureIntoCache_(url);
|
76
|
+
}
|
77
|
+
return this.fixturesCache_[url];
|
78
|
+
};
|
79
|
+
|
80
|
+
jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) {
|
81
|
+
var self = this;
|
82
|
+
var url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl;
|
83
|
+
$.ajax({
|
84
|
+
async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
|
85
|
+
cache: false,
|
86
|
+
dataType: 'html',
|
87
|
+
url: url,
|
88
|
+
success: function(data) {
|
89
|
+
self.fixturesCache_[relativeUrl] = data;
|
90
|
+
}
|
91
|
+
});
|
92
|
+
};
|
93
|
+
|
94
|
+
jasmine.Fixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) {
|
95
|
+
return this[methodName].apply(this, passedArguments);
|
96
|
+
};
|
97
|
+
|
98
|
+
|
99
|
+
jasmine.JQuery = function() {};
|
100
|
+
|
101
|
+
jasmine.JQuery.browserTagCaseIndependentHtml = function(html) {
|
102
|
+
return $('<div/>').append(html).html();
|
103
|
+
};
|
104
|
+
|
105
|
+
jasmine.JQuery.elementToString = function(element) {
|
106
|
+
return $('<div />').append(element.clone()).html();
|
107
|
+
};
|
108
|
+
|
109
|
+
jasmine.JQuery.matchersClass = {};
|
110
|
+
|
111
|
+
(function(namespace) {
|
112
|
+
var data = {
|
113
|
+
spiedEvents: {},
|
114
|
+
handlers: []
|
115
|
+
};
|
116
|
+
|
117
|
+
namespace.events = {
|
118
|
+
spyOn: function(selector, eventName) {
|
119
|
+
var handler = function(e) {
|
120
|
+
data.spiedEvents[[selector, eventName]] = e;
|
121
|
+
};
|
122
|
+
$(selector).bind(eventName, handler);
|
123
|
+
data.handlers.push(handler);
|
124
|
+
},
|
125
|
+
|
126
|
+
wasTriggered: function(selector, eventName) {
|
127
|
+
return !!(data.spiedEvents[[selector, eventName]]);
|
128
|
+
},
|
129
|
+
|
130
|
+
cleanUp: function() {
|
131
|
+
data.spiedEvents = {};
|
132
|
+
data.handlers = [];
|
133
|
+
}
|
134
|
+
}
|
135
|
+
})(jasmine.JQuery);
|
136
|
+
|
137
|
+
(function(){
|
138
|
+
var jQueryMatchers = {
|
139
|
+
toHaveClass: function(className) {
|
140
|
+
return this.actual.hasClass(className);
|
141
|
+
},
|
142
|
+
|
143
|
+
toBeVisible: function() {
|
144
|
+
return this.actual.is(':visible');
|
145
|
+
},
|
146
|
+
|
147
|
+
toBeHidden: function() {
|
148
|
+
return this.actual.is(':hidden');
|
149
|
+
},
|
150
|
+
|
151
|
+
toBeSelected: function() {
|
152
|
+
return this.actual.is(':selected');
|
153
|
+
},
|
154
|
+
|
155
|
+
toBeChecked: function() {
|
156
|
+
return this.actual.is(':checked');
|
157
|
+
},
|
158
|
+
|
159
|
+
toBeEmpty: function() {
|
160
|
+
return this.actual.is(':empty');
|
161
|
+
},
|
162
|
+
|
163
|
+
toExist: function() {
|
164
|
+
return this.actual.size() > 0;
|
165
|
+
},
|
166
|
+
|
167
|
+
toHaveAttr: function(attributeName, expectedAttributeValue) {
|
168
|
+
return hasProperty(this.actual.attr(attributeName), expectedAttributeValue);
|
169
|
+
},
|
170
|
+
|
171
|
+
toHaveId: function(id) {
|
172
|
+
return this.actual.attr('id') == id;
|
173
|
+
},
|
174
|
+
|
175
|
+
toHaveHtml: function(html) {
|
176
|
+
return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html);
|
177
|
+
},
|
178
|
+
|
179
|
+
toHaveText: function(text) {
|
180
|
+
if (text && jQuery.isFunction(text.test)) {
|
181
|
+
return text.test(this.actual.text());
|
182
|
+
} else {
|
183
|
+
return this.actual.text() == text;
|
184
|
+
}
|
185
|
+
},
|
186
|
+
|
187
|
+
toHaveValue: function(value) {
|
188
|
+
return this.actual.val() == value;
|
189
|
+
},
|
190
|
+
|
191
|
+
toHaveData: function(key, expectedValue) {
|
192
|
+
return hasProperty(this.actual.data(key), expectedValue);
|
193
|
+
},
|
194
|
+
|
195
|
+
toBe: function(selector) {
|
196
|
+
return this.actual.is(selector);
|
197
|
+
},
|
198
|
+
|
199
|
+
toContain: function(selector) {
|
200
|
+
return this.actual.find(selector).size() > 0;
|
201
|
+
},
|
202
|
+
|
203
|
+
toBeDisabled: function(selector){
|
204
|
+
return this.actual.attr("disabled") == true;
|
205
|
+
}
|
206
|
+
};
|
207
|
+
|
208
|
+
var hasProperty = function(actualValue, expectedValue) {
|
209
|
+
if (expectedValue === undefined) {
|
210
|
+
return actualValue !== undefined;
|
211
|
+
}
|
212
|
+
return actualValue == expectedValue;
|
213
|
+
};
|
214
|
+
|
215
|
+
var bindMatcher = function(methodName) {
|
216
|
+
var builtInMatcher = jasmine.Matchers.prototype[methodName];
|
217
|
+
|
218
|
+
jasmine.JQuery.matchersClass[methodName] = function() {
|
219
|
+
if (this.actual instanceof jQuery) {
|
220
|
+
var result = jQueryMatchers[methodName].apply(this, arguments);
|
221
|
+
this.actual = jasmine.JQuery.elementToString(this.actual);
|
222
|
+
return result;
|
223
|
+
}
|
224
|
+
|
225
|
+
if (builtInMatcher) {
|
226
|
+
return builtInMatcher.apply(this, arguments);
|
227
|
+
}
|
228
|
+
|
229
|
+
return false;
|
230
|
+
};
|
231
|
+
};
|
232
|
+
|
233
|
+
for(var methodName in jQueryMatchers) {
|
234
|
+
bindMatcher(methodName);
|
235
|
+
}
|
236
|
+
})();
|
237
|
+
|
238
|
+
beforeEach(function() {
|
239
|
+
this.addMatchers(jasmine.JQuery.matchersClass);
|
240
|
+
this.addMatchers({
|
241
|
+
toHaveBeenTriggeredOn: function(selector) {
|
242
|
+
this.message = function() {
|
243
|
+
return [
|
244
|
+
"Expected event " + this.actual + " to have been triggered on" + selector,
|
245
|
+
"Expected event " + this.actual + " not to have been triggered on" + selector
|
246
|
+
];
|
247
|
+
};
|
248
|
+
return jasmine.JQuery.events.wasTriggered(selector, this.actual);
|
249
|
+
}
|
250
|
+
})
|
251
|
+
});
|
252
|
+
|
253
|
+
afterEach(function() {
|
254
|
+
jasmine.getFixtures().cleanUp();
|
255
|
+
jasmine.JQuery.events.cleanUp();
|
256
|
+
});
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: jasminerice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Brad Phelan
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-07-
|
13
|
+
date: 2011-07-18 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -47,7 +47,6 @@ files:
|
|
47
47
|
- app/controllers/jasminerice/spec_controller.rb
|
48
48
|
- app/helpers/jasminerice/application_helper.rb
|
49
49
|
- app/views/jasminerice/spec/index.html.haml
|
50
|
-
- app/views/layouts/jasminerice/application.html.erb
|
51
50
|
- config/initializers/jasminerice.rb
|
52
51
|
- config/routes.rb
|
53
52
|
- jasminerice.gemspec
|
@@ -57,6 +56,7 @@ files:
|
|
57
56
|
- script/rails
|
58
57
|
- vendor/assets/images/jasmine_favicon.png
|
59
58
|
- vendor/assets/javascripts/jasmine-html.js
|
59
|
+
- vendor/assets/javascripts/jasmine-jquery-1.2.0.js
|
60
60
|
- vendor/assets/javascripts/jasmine.js
|
61
61
|
- vendor/assets/stylesheets/jasmine.css
|
62
62
|
has_rdoc: true
|