minitest-capybara 0.2.0 → 0.3.0

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: d5d8349d1840c9e41fe11bbad48becf9e5528d6f
4
+ data.tar.gz: 6bc1d2578e4463b58ea58209234d03615c5476c5
5
+ SHA512:
6
+ metadata.gz: 9c189863a60328620e1bcfb47c472f15c2dc1f4482cfa440c6a8fc6feb0a5ba8c519bbff2ddf756190aa62342c5b6571365ba04f477537882d4d57d611b1c836
7
+ data.tar.gz: d4afd15a1059f04230e9805ee8d02ef0e02b9639bfb62aa3623abbaa553cf859a844596cca081a3ce8096bbda3f48b6df1f0fe800bc5b4e0f1f59a71d98910d1
data/README.md CHANGED
@@ -4,8 +4,9 @@ Capybara matchers support for minitest unit & spec
4
4
 
5
5
  ## Why?
6
6
 
7
- Capybara has good support for RSpec. If you want to use it with minitest,
8
- you can of course write:
7
+ Capybara has good support for RSpec.
8
+
9
+ If you want to use it with minitest, you can of course write:
9
10
 
10
11
  ```ruby
11
12
  assert page.has_content?("Hello")
@@ -20,6 +21,8 @@ With this project minitest gets all the good stuff.
20
21
 
21
22
  ## Usage
22
23
 
24
+ See example app: https://github.com/wojtekmach/minitest-capybara-example
25
+
23
26
  Add to Gemfile:
24
27
 
25
28
  ```ruby
@@ -30,16 +33,25 @@ end
30
33
  ```
31
34
 
32
35
  Next, I like to create seperate test class for acceptance tests.
33
- Note, Rails 4.0 will support minitest/spec out of the box, so you would just
34
- subclass `ActiveSupport::TestCase` instead of `MiniTest::Spec.`
35
36
 
36
37
  ```ruby
37
38
  # test/test_helper.rb
38
39
  require "capybara/rails"
39
40
 
40
- class AcceptanceTest < MiniTest::Spec
41
- include Capybara::RSpecMatchers
41
+ # for just minitest/unit
42
+ class AcceptanceTest < Minitest::Unit::TestCase
42
43
  include Capybara::DSL
44
+ include Minitest::Capybara::Assertions
45
+
46
+ def teardown
47
+ Capybara.reset_session!
48
+ Capybara.use_default_driver
49
+ end
50
+ end
51
+
52
+ # for minitest/spec
53
+ class AcceptanceSpec < AcceptanceTest
54
+ extend Minitest::Spec::DSL
43
55
  end
44
56
  ```
45
57
 
@@ -49,10 +61,24 @@ Finally, you can use it like this:
49
61
  # test/acceptance/home_test.rb
50
62
  require "test_helper"
51
63
 
52
- class HomeTest < AcceptanceTest
64
+ class HomeTest < AcceptanceSpec
53
65
  it "home test" do
54
66
  visit "/"
55
- must_have_content "Homepage"
67
+
68
+ assert_content "Homepage"
69
+ page.must_have_content "Homepage"
70
+
71
+ within ".login" do
72
+ refute_content "Signed in as"
73
+ page.wont_have_content "Signed in as"
74
+ end
75
+
76
+ assert_link "Sign in"
77
+ assert_link find(".login"), "Sign in"
78
+ find(".login").must_have_link("Sign in")
79
+
80
+ assert_selector 'li:first', text: "Item 1"
81
+ page.must_have_selector 'li:first', text: "Item 1"
56
82
  end
57
83
  end
58
84
  ```
@@ -66,7 +92,7 @@ Switching drivers is easy with [minitest-metadata]:
66
92
  ```ruby
67
93
  require 'minitest-metadata'
68
94
 
69
- class AcceptanceTest
95
+ class AcceptanceSpec
70
96
  before do
71
97
  if metadata[:js]
72
98
  Capybara.current_driver = Capybara.javascript_driver
@@ -76,10 +102,10 @@ class AcceptanceTest
76
102
  end
77
103
  end
78
104
 
79
- class HomeTest < AcceptanceTest
105
+ class HomeTest < AcceptanceSpec
80
106
  it "home with ajax", js: true do
81
107
  visit "/"
82
- must_have_content "AJAX enabled..."
108
+ page.must_have_content "AJAX enabled..."
83
109
  end
84
110
  end
85
111
  ```
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.3.0
@@ -1,17 +1 @@
1
- require "minitest/matchers"
2
- require "capybara/dsl"
3
- require "capybara/rspec/matchers"
4
-
5
- module Minitest
6
- module Capybara
7
- VERSION = "0.2.0"
8
- end
9
- end
10
-
11
- Capybara::RSpecMatchers.module_eval do
12
- def self.included(base)
13
- instance_methods.each do |name|
14
- base.register_matcher name, name
15
- end
16
- end
17
- end
1
+ require 'minitest/capybara'
@@ -0,0 +1,83 @@
1
+ require 'minitest/capybara/version'
2
+ require 'minitest/spec'
3
+
4
+ module Minitest::Capybara
5
+ module Assertions
6
+ METHODS = Capybara::Session::NODE_METHODS.grep(/^has_/).map { |s| s.to_s.match(/has_(.*?)\?/)[1] }
7
+
8
+ def self.included(base)
9
+ raise "Make sure to include Capybara::Minitest::Assertions after Capybara::DSL" unless base < Capybara::DSL
10
+ end
11
+
12
+ def self.assertion_name(method)
13
+ method.start_with?('no_') ? "refute_#{method.gsub(/^no_/, '')}" : "assert_#{method}"
14
+ end
15
+
16
+ def assert_text(*args)
17
+ node, *args = prepare_args(args)
18
+ assert has_text?(*args), message { "Expected to include #{args.first.inspect}" }
19
+ end
20
+ alias_method :assert_content, :assert_text
21
+
22
+ def refute_text(*args)
23
+ node, *args = prepare_args(args)
24
+ assert has_no_text?(*args), message { "Expected not to include #{args.first.inspect}" }
25
+ end
26
+ alias_method :refute_content, :refute_text
27
+
28
+ def assert_selector(*args)
29
+ node, *args = prepare_args(args)
30
+ node.assert_selector(*args)
31
+ rescue Capybara::ExpectationNotMet => e
32
+ assert false, e.message
33
+ end
34
+
35
+ def refute_selector(*args)
36
+ node, *args = prepare_args(args)
37
+ node.assert_no_selector(*args)
38
+ rescue Capybara::ExpectationNotMet => e
39
+ assert false, e.message
40
+ end
41
+
42
+ ruby = ""
43
+ (METHODS - %w[text no_text content no_content selector no_selector]).each do |method|
44
+ assertion_name = method.start_with?('no') ? "refute_#{method.gsub(/^no_/, '')}" : "assert_#{method}"
45
+
46
+ ruby << <<-RUBY
47
+ def #{assertion_name}(*args)
48
+ node, *args = prepare_args(args)
49
+ assert node.has_#{method}?(*args), message { Capybara::Helpers.failure_message(*args) }
50
+ end
51
+ RUBY
52
+ end
53
+ class_eval(ruby)
54
+
55
+ private
56
+
57
+ def prepare_args(args)
58
+ if args.first.is_a?(Capybara::Session) || args.first.kind_of?(Capybara::Node::Base)
59
+ args
60
+ else
61
+ [page, *args]
62
+ end
63
+ end
64
+ end
65
+
66
+ module Expectations
67
+ def self.expectation_name(method)
68
+ method.start_with?('no_') ? "wont_have_#{method.gsub(/^no_/, '')}" : "must_have_#{method}"
69
+ end
70
+
71
+ Assertions::METHODS.each do |method|
72
+ infect_an_assertion Assertions.assertion_name(method), expectation_name(method), :reverse
73
+ end
74
+ end
75
+ end
76
+
77
+ class Capybara::Session
78
+ include Minitest::Capybara::Expectations
79
+ end
80
+
81
+ class Capybara::Node::Base
82
+ include Minitest::Capybara::Expectations
83
+ end
@@ -0,0 +1,5 @@
1
+ module Minitest
2
+ module Capybara
3
+ VERSION = File.read(File.expand_path("../../../../VERSION", __FILE__)).strip
4
+ end
5
+ end
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
- require "minitest-capybara"
3
+ require "minitest/capybara/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "minitest-capybara"
@@ -18,8 +18,8 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_dependency "minitest-matchers", "~> 1.2"
22
- s.add_dependency "capybara", "~> 1.0"
21
+ s.add_dependency "capybara", "~> 2.0"
23
22
 
24
23
  s.add_runtime_dependency "rake"
24
+ s.add_runtime_dependency "minitest", "~> 4.0"
25
25
  end
@@ -0,0 +1,83 @@
1
+ require "minitest/autorun"
2
+
3
+ require "capybara"
4
+ require "minitest/capybara"
5
+
6
+ Capybara.app = lambda { |env| [200, {}, "<div><h1>foo</h1><a href='/'>bar</a></div>"] }
7
+
8
+ describe "app" do
9
+ include Capybara::DSL
10
+ include Minitest::Capybara::Assertions
11
+
12
+ before do
13
+ visit "/"
14
+ end
15
+
16
+ # assertions
17
+
18
+ it "supports assert_content" do
19
+ assert_content("foo").must_equal true
20
+ proc { assert_content("BAD") }.must_raise Minitest::Assertion
21
+ end
22
+
23
+ it "supports refute_content" do
24
+ refute_content("BAD").must_equal true
25
+ proc { refute_content("foo") }.must_raise Minitest::Assertion
26
+ end
27
+
28
+ it "supports assert_selector" do
29
+ assert_selector "h1", text: "foo"
30
+ assert_selector :css, "h1", text: "foo"
31
+ proc { assert_selector "h1", text: "BAD" }.must_raise Minitest::Assertion
32
+ proc { assert_selector :css, "h1", text: "BAD" }.must_raise Minitest::Assertion
33
+ end
34
+
35
+ it "supports refute_selector" do
36
+ refute_selector "h1", text: "BAD"
37
+ proc { refute_selector "h1", text: "foo" }.must_raise Minitest::Assertion
38
+ end
39
+
40
+ it "supports assert_link" do
41
+ assert_link 'bar'
42
+ proc { assert_link("BAD") }.must_raise Minitest::Assertion
43
+ end
44
+
45
+ it "supports refute_link" do
46
+ refute_link 'BAD'
47
+ proc { refute_link("bar") }.must_raise Minitest::Assertion
48
+ end
49
+
50
+ # expectations
51
+
52
+ it "supports must_have_content" do
53
+ page.must_have_content "foo"
54
+ proc { page.must_have_content "BAD" }.must_raise Minitest::Assertion
55
+ end
56
+
57
+ it "supports wont_have_content" do
58
+ page.wont_have_content "BAD"
59
+ proc { page.wont_have_content "foo" }.must_raise Minitest::Assertion
60
+ end
61
+
62
+ it "supports must_have_selector" do
63
+ page.must_have_selector "h1", text: "foo"
64
+ page.must_have_selector :css, "h1", text: "foo"
65
+ proc { page.must_have_selector "h1", text: "BAD" }.must_raise Minitest::Assertion
66
+ proc { page.must_have_selector :css, "h1", text: "BAD" }.must_raise Minitest::Assertion
67
+ end
68
+
69
+ it "supports wont_have_selector" do
70
+ page.wont_have_selector "h1", text: "BAD"
71
+ proc { page.wont_have_selector "h1", text: "foo" }.must_raise Minitest::Assertion
72
+ end
73
+
74
+ it "supports must_have_link" do
75
+ page.must_have_link 'bar'
76
+ proc { page.must_have_link("BAD") }.must_raise Minitest::Assertion
77
+ end
78
+
79
+ it "supports wont_have_link" do
80
+ page.wont_have_link 'BAD'
81
+ proc { page.wont_have_link("bar") }.must_raise Minitest::Assertion
82
+ end
83
+ end
metadata CHANGED
@@ -1,64 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest-capybara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
5
- prerelease:
4
+ version: 0.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Wojciech Mach
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-04-23 00:00:00.000000000 Z
11
+ date: 2013-06-30 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: minitest-matchers
14
+ name: capybara
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: '1.2'
19
+ version: '2.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
- version: '1.2'
26
+ version: '2.0'
30
27
  - !ruby/object:Gem::Dependency
31
- name: capybara
28
+ name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
- version: '1.0'
33
+ version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
- version: '1.0'
40
+ version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
- name: rake
42
+ name: minitest
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ~>
52
46
  - !ruby/object:Gem::Version
53
- version: '0'
47
+ version: '4.0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ~>
60
53
  - !ruby/object:Gem::Version
61
- version: '0'
54
+ version: '4.0'
62
55
  description: Capybara matchers support for minitest unit and spec
63
56
  email:
64
57
  - wojtek@wojtekmach.pl
@@ -70,38 +63,34 @@ files:
70
63
  - Gemfile
71
64
  - README.md
72
65
  - Rakefile
66
+ - VERSION
73
67
  - lib/minitest-capybara.rb
68
+ - lib/minitest/capybara.rb
69
+ - lib/minitest/capybara/version.rb
74
70
  - minitest-capybara.gemspec
75
- - test/minitest-capybara_test.rb
71
+ - test/minitest/capybara_test.rb
76
72
  homepage: ''
77
73
  licenses: []
74
+ metadata: {}
78
75
  post_install_message:
79
76
  rdoc_options: []
80
77
  require_paths:
81
78
  - lib
82
79
  required_ruby_version: !ruby/object:Gem::Requirement
83
- none: false
84
80
  requirements:
85
- - - ! '>='
81
+ - - '>='
86
82
  - !ruby/object:Gem::Version
87
83
  version: '0'
88
- segments:
89
- - 0
90
- hash: -2882241969094489830
91
84
  required_rubygems_version: !ruby/object:Gem::Requirement
92
- none: false
93
85
  requirements:
94
- - - ! '>='
86
+ - - '>='
95
87
  - !ruby/object:Gem::Version
96
88
  version: '0'
97
- segments:
98
- - 0
99
- hash: -2882241969094489830
100
89
  requirements: []
101
90
  rubyforge_project: minitest-capybara
102
- rubygems_version: 1.8.25
91
+ rubygems_version: 2.0.3
103
92
  signing_key:
104
- specification_version: 3
93
+ specification_version: 4
105
94
  summary: Capybara matchers support for minitest unit and spec
106
95
  test_files:
107
- - test/minitest-capybara_test.rb
96
+ - test/minitest/capybara_test.rb
@@ -1,27 +0,0 @@
1
- require "minitest-capybara"
2
- require "minitest/autorun"
3
-
4
- describe "test" do
5
- include Capybara::RSpecMatchers
6
-
7
- it "supports have_selector" do
8
- subject = "<h1>hello <a>asd</a></h1>"
9
- args = [:css, "h1 a", {:text => "asd"}]
10
-
11
- assert_have_selector subject, *args
12
- subject.must_have_selector *args
13
- end
14
- end
15
-
16
- Capybara.app = lambda { |env| [200, {}, "<p><h1>foo</h1></p>"] }
17
-
18
- describe "app" do
19
- include Capybara::RSpecMatchers
20
- include Capybara::DSL
21
-
22
- it "works" do
23
- visit "/"
24
- assert_have_content(page, "foo").must_equal true
25
- proc { refute_have_content page, "foo" }.must_raise MiniTest::Assertion
26
- end
27
- end