simple_javascript_testing 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 85a7a2f6974dc9ffc11dda6b0718aadebb0de710
4
+ data.tar.gz: c2275e6e54937e7cc005cb3599eca1b42189b660
5
+ SHA512:
6
+ metadata.gz: ff3e7dcc061ffa6391d6b2e185aa7c2fa6f4d6142b96d35a86642a92770230e7b8e44df0e26df2d6e23c94eb967b36089cf4ab8d93eb0afce8a53cb39ee538c1
7
+ data.tar.gz: e4cc075c93af14bf1c0de7da7f260406210cbd6662a7e8a32a5efa4bcca0113f6d5a767b3f27eaf95cb32e05f9158d84a7cc175c672b96d109f7d8a6fd26e9a7
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ npm-debug.log
2
+ log
3
+ *.swp
4
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'rails'
6
+ gem 'render_anywhere'
data/Gemfile.lock ADDED
@@ -0,0 +1,89 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ simple_javascript_testing (0.0.1)
5
+ rails (>= 3.0.7)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ actionmailer (4.1.6)
11
+ actionpack (= 4.1.6)
12
+ actionview (= 4.1.6)
13
+ mail (~> 2.5, >= 2.5.4)
14
+ actionpack (4.1.6)
15
+ actionview (= 4.1.6)
16
+ activesupport (= 4.1.6)
17
+ rack (~> 1.5.2)
18
+ rack-test (~> 0.6.2)
19
+ actionview (4.1.6)
20
+ activesupport (= 4.1.6)
21
+ builder (~> 3.1)
22
+ erubis (~> 2.7.0)
23
+ activemodel (4.1.6)
24
+ activesupport (= 4.1.6)
25
+ builder (~> 3.1)
26
+ activerecord (4.1.6)
27
+ activemodel (= 4.1.6)
28
+ activesupport (= 4.1.6)
29
+ arel (~> 5.0.0)
30
+ activesupport (4.1.6)
31
+ i18n (~> 0.6, >= 0.6.9)
32
+ json (~> 1.7, >= 1.7.7)
33
+ minitest (~> 5.1)
34
+ thread_safe (~> 0.1)
35
+ tzinfo (~> 1.1)
36
+ arel (5.0.1.20140414130214)
37
+ builder (3.2.2)
38
+ erubis (2.7.0)
39
+ hike (1.2.3)
40
+ i18n (0.6.11)
41
+ json (1.8.1)
42
+ mail (2.6.1)
43
+ mime-types (>= 1.16, < 3)
44
+ mime-types (2.4.3)
45
+ minitest (5.4.2)
46
+ multi_json (1.10.1)
47
+ rack (1.5.2)
48
+ rack-test (0.6.2)
49
+ rack (>= 1.0)
50
+ rails (4.1.6)
51
+ actionmailer (= 4.1.6)
52
+ actionpack (= 4.1.6)
53
+ actionview (= 4.1.6)
54
+ activemodel (= 4.1.6)
55
+ activerecord (= 4.1.6)
56
+ activesupport (= 4.1.6)
57
+ bundler (>= 1.3.0, < 2.0)
58
+ railties (= 4.1.6)
59
+ sprockets-rails (~> 2.0)
60
+ railties (4.1.6)
61
+ actionpack (= 4.1.6)
62
+ activesupport (= 4.1.6)
63
+ rake (>= 0.8.7)
64
+ thor (>= 0.18.1, < 2.0)
65
+ rake (10.3.2)
66
+ render_anywhere (0.0.9)
67
+ rails (>= 3.0.7)
68
+ sprockets (2.12.0)
69
+ hike (~> 1.2)
70
+ multi_json (~> 1.0)
71
+ rack (~> 1.0)
72
+ tilt (~> 1.1, != 1.3.0)
73
+ sprockets-rails (2.2.0)
74
+ actionpack (>= 3.0)
75
+ activesupport (>= 3.0)
76
+ sprockets (>= 2.8, < 4.0)
77
+ thor (0.19.1)
78
+ thread_safe (0.3.4)
79
+ tilt (1.4.1)
80
+ tzinfo (1.2.2)
81
+ thread_safe (~> 0.1)
82
+
83
+ PLATFORMS
84
+ ruby
85
+
86
+ DEPENDENCIES
87
+ rails
88
+ render_anywhere
89
+ simple_javascript_testing!
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ simple_javascript_testing
2
+ =========================
3
+
4
+ simple javascript testing with rails and phantomjs
File without changes
File without changes
data/index.js ADDED
@@ -0,0 +1,58 @@
1
+ var system = require('system')
2
+ var args = system.args
3
+
4
+ if (!Function.prototype.bind) {
5
+ Function.prototype.bind = function(oThis) {
6
+ if (typeof this !== 'function') {
7
+ // closest thing possible to the ECMAScript 5
8
+ // internal IsCallable function
9
+ throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
10
+ }
11
+
12
+ var aArgs = Array.prototype.slice.call(arguments, 1),
13
+ fToBind = this,
14
+ fNOP = function() {},
15
+ fBound = function() {
16
+ return fToBind.apply(this instanceof fNOP && oThis
17
+ ? this
18
+ : oThis,
19
+ aArgs.concat(Array.prototype.slice.call(arguments)));
20
+ };
21
+
22
+ fNOP.prototype = this.prototype;
23
+ fBound.prototype = new fNOP();
24
+
25
+ return fBound;
26
+ };
27
+ }
28
+
29
+ if (args.length === 1) {
30
+ console.log('Try to pass some arguments when invoking this script!');
31
+ phantom.exit()
32
+ }
33
+
34
+ var page = require('webpage').create()
35
+ page.onConsoleMessage = function(msg, lineNum, sourceId) {
36
+ console.log('CONSOLE: ' + msg ) //' (from line #' + lineNum + ' in "' + sourceId + '")');
37
+ }
38
+
39
+ var testObject = {
40
+ assert_equal: function(a, b){
41
+ if (a != b){
42
+ console.log("assertion failed:", a, "not equal to", b)
43
+ }
44
+ }
45
+ }
46
+
47
+ exports.runTest = function(name, test){
48
+ page.open("file:///" + args[1], function(status){
49
+ try{
50
+ test.bind(testObject)(page)
51
+ console.log("test succeeded: " + name)
52
+ } catch(e){
53
+ console.log(e.stack)
54
+ console.log("test failed: " + name)
55
+ }
56
+ phantom.exit()
57
+ })
58
+ }
@@ -0,0 +1,52 @@
1
+ require 'fileutils'
2
+ require 'render_anywhere'
3
+
4
+ class AnyClass
5
+ include RenderAnywhere
6
+
7
+ class << self
8
+ attr_accessor :prefix
9
+ end
10
+
11
+ def build_html(template)
12
+ html = render :template => template,
13
+ :layout => 'application'
14
+ html
15
+ end
16
+ # Include an additional helper
17
+ # If being used in a rake task, you may need to require the file(s)
18
+ # Ex: require Rails.root.join('app', 'helpers', 'blog_pages_helper')
19
+ def include_helper(helper_name)
20
+ set_render_anywhere_helpers(helper_name)
21
+ end
22
+
23
+ # Apply an instance variable to the controller
24
+ # If you need to use instance variables instead of locals, just call this method as many times as you need.
25
+ def set_instance_variable_to(var, value)
26
+ set_instance_variable(var, value)
27
+ end
28
+
29
+ class RenderingController < RenderAnywhere::RenderingController
30
+ # include custom modules here, define accessors, etc. For example:
31
+ attr_accessor :current_user
32
+ helper_method :current_user
33
+ end
34
+ end
35
+
36
+ module SimpleJavascriptTesting
37
+ def call_template_with_js(template, &block)
38
+ data = AnyClass.new
39
+ if block_given?
40
+ yield data
41
+ end
42
+ FileUtils.mkdir_p("test/html/#{File.dirname template}")
43
+ FileUtils.mkdir_p("test/javascript/#{File.dirname template}")
44
+ html = data.build_html(template)
45
+ html.gsub!("<head>", "<head><script src='#{File.expand_path('node_modules')}/simple_javascript_testing/lib/stub_ajax.js'></script>")
46
+ html.gsub!("<script src='#{AnyClass.prefix}", "<script src='#{File.expand_path('public')}")
47
+ File.write("test/html/#{template}.html", html)
48
+ thing = "#{File.expand_path('html', 'test')}/#{template}"
49
+ thing2 = "#{File.expand_path('javascript', 'test')}/#{template}"
50
+ system "phantomjs #{thing2}.js #{thing}.html"
51
+ end
52
+ end
data/lib/stub_ajax.js ADDED
@@ -0,0 +1,23 @@
1
+ var all_requests = {}
2
+ var all_requests_length = 0
3
+
4
+ XMLHttpRequest.prototype.open = function(method, url){
5
+ all_requests_length += 1
6
+ all_requests[url] = {onload: this.onload}
7
+ }
8
+
9
+ function triggerRequest(url, data){
10
+ var request = all_requests[url]
11
+ all_requests_length -= 1
12
+ request.response = JSON.stringify(data)
13
+ request.status = 200
14
+ request.onload(request)
15
+ }
16
+
17
+ function assertAllRequestsRun(){
18
+ if (all_requests_length != 0){
19
+ throw("some requests not called")
20
+ }
21
+ }
22
+
23
+ XMLHttpRequest.prototype.send = function(){ }
data/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "simple_javascript_testing",
3
+ "version": "0.0.2",
4
+ "description": "simple javascript testing for rails",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/towski/simple_javascript_testing.git"
12
+ },
13
+ "keywords": [
14
+ "simple",
15
+ "javascript",
16
+ "testing",
17
+ "rails"
18
+ ],
19
+ "author": "towski",
20
+ "license": "ISC",
21
+ "bugs": {
22
+ "url": "https://github.com/towski/simple_javascript_testing/issues"
23
+ },
24
+ "homepage": "https://github.com/towski/simple_javascript_testing"
25
+ }
@@ -0,0 +1,17 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'simple_javascript_testing'
3
+ s.version = '0.0.1'
4
+ s.date = '2014-10-31'
5
+ s.summary = "Simple Javascript Testing"
6
+ s.description = "simple javascript testing for rails with phantomjs"
7
+ s.authors = ["towski"]
8
+ s.email = 'towski@gmail.com'
9
+ s.homepage = 'http://rubygems.org/gems/simple_javascript_testing'
10
+ s.license = 'MIT'
11
+ s.files = `git ls-files`.split("\n")
12
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
13
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
14
+ s.require_paths = ["lib"]
15
+
16
+ s.add_dependency('rails', '>= 3.0.7')
17
+ end
File without changes
File without changes
@@ -0,0 +1,35 @@
1
+ require 'bundler/setup'
2
+ require 'minitest/autorun'
3
+ require 'action_controller'
4
+ require 'simple_javascript_testing'
5
+
6
+ require 'rails/all'
7
+
8
+ # Require the gems listed in Gemfile, including any gems
9
+ # you've limited to :test, :development, or :production.
10
+ Bundler.require(*Rails.groups)
11
+
12
+ class SomeApplication < Rails::Application
13
+ end
14
+
15
+ module ApplicationHelper
16
+ end
17
+
18
+ class ApplicationController < ActionController::Base
19
+ end
20
+
21
+ Rails.application.initialize!
22
+
23
+ SharedTestRoutes = ActionDispatch::Routing::RouteSet.new
24
+ @routes = SharedTestRoutes
25
+
26
+ @routes.draw do
27
+ get ':controller(/:action)'
28
+ end
29
+
30
+ class SimpleJavascriptTestingTest < Minitest::Test
31
+ include SimpleJavascriptTesting
32
+ def test_call_template_with_js
33
+ call_template_with_js "users/index"
34
+ end
35
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_javascript_testing
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - towski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 3.0.7
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.7
27
+ description: simple javascript testing for rails with phantomjs
28
+ email: towski@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - .gitignore
34
+ - Gemfile
35
+ - Gemfile.lock
36
+ - README.md
37
+ - app/views/layouts/application.html.erb
38
+ - app/views/users/index.html.erb
39
+ - index.js
40
+ - lib/simple_javascript_testing.rb
41
+ - lib/stub_ajax.js
42
+ - package.json
43
+ - simple_javascript_testing.gemspec
44
+ - test/html/users/index.html
45
+ - test/javascript/users/index.js
46
+ - test/simple_javascript_testing_test.rb
47
+ homepage: http://rubygems.org/gems/simple_javascript_testing
48
+ licenses:
49
+ - MIT
50
+ metadata: {}
51
+ post_install_message:
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubyforge_project:
67
+ rubygems_version: 2.2.2
68
+ signing_key:
69
+ specification_version: 4
70
+ summary: Simple Javascript Testing
71
+ test_files: []