saki 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,12 +1,14 @@
1
1
  # Saki - For times when you can't swallow Cucumber
2
2
 
3
- Saki lets you do acceptance testing on top of RSpec with considerably more terseness than cucumber, but without sacrificing readability. Are you tired of having DRY code, but tests that seem to babble on "for the length of a bible"? Me too. How about RSpec code that is hard to follow, while Ruby itself is as "human" as a programming language can get? I hate it too.
3
+ Saki lets you do acceptance testing on top of RSpec. It is considerably more terse than cucumber, but does not sacrifice readability.
4
+
5
+ Are you tired of having DRY code, but tests that seem to babble on "for the length of a bible"? Me too. How about RSpec code that is hard to follow, when Ruby itself is as "human" as a programming language can get? I hate it too.
4
6
 
5
7
  Enter Saki stage left.
6
8
 
7
9
  ## How terse is it?
8
10
 
9
- Well, here's a sample that assumes a user exists and visits an edit path for that user. Me like.
11
+ Well, here's a sample that sets up contexts that create a user and then visit an edit path for that user.
10
12
 
11
13
  with_existing :user do
12
14
  on_visiting edit_path_for(:user) do
@@ -14,7 +16,7 @@ Well, here's a sample that assumes a user exists and visits an edit path for tha
14
16
  end
15
17
  end
16
18
 
17
- This code basically injects some before blocks behind the scene, so it would look like this in vanilla RSpec:
19
+ This code basically injects some "before blocks", so it would look like this in vanilla RSpec:
18
20
 
19
21
  context "when a user exists" do
20
22
  before { @user = Factory :user }
@@ -24,11 +26,37 @@ This code basically injects some before blocks behind the scene, so it would loo
24
26
  end
25
27
  end
26
28
 
27
- Much more expressive don't you think? And smooth to follow, no?
29
+ I feel Saki is much more expressive.
30
+
31
+ ## What class-level methods does it use (for setting up contexts)?
32
+
33
+ `with_existing` takes a factory name as a symbol and assigns it to on instance variable with the same name.
34
+
35
+ `on_visiting` takes a path either as a string or as a lambda that executes within a before block to set up the path. This is useful when the code is dependent on an instance variable for path creation.
36
+
37
+ `on_visiting` has several helper functions for establishing a path: `create_path_for`, `index_path_for`, `edit_path_for`, `show_path_for` and `new_path_for`. These paths all take resource names for establishing a path. In cases where the resource is nested, it has a :parent => parent_resource option. This lets you set up blocks like:
38
+
39
+ on_visiting index_path_for(:auction)
40
+
41
+ `where` is a function taking as a parameter either a lambda to execute in the before block, or a symbol which is the name of a function to execute in the before block.
42
+
43
+ Finally, to simplify setting up integration tests, anything you wrap in an `integrate` block (like `describe`) sets the test type to acceptance.
44
+
45
+ ## Installation
46
+
47
+ Saki installs with two steps. First, add to your Gemfile:
48
+
49
+ gem 'saki'
50
+
51
+ Then to fill out the directories run:
52
+
53
+ rails generate saki:install
28
54
 
55
+ Then, as long as your acceptance specs require the acceptance_helper file you should be good to go.
56
+
29
57
  ## What assumptions does it make?
30
58
 
31
- It assumes that you are using factory_girl and capybara, though it probably would work fine with other test factories and webrat. If you need another factory in the mix, just redefine the default_factory method to behave how you want.
59
+ It assumes that you are using factory_girl and capybara or webrat, though it probably would work fine with other test factories. If you need another factory in the mix, just redefine the `default_factory` method to behave how you want.
32
60
 
33
61
  ## Note on Patches/Pull Requests
34
62
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -0,0 +1,39 @@
1
+ require 'rails/generators'
2
+ AcceptanceDir = "acceptance"
3
+
4
+ module Saki
5
+ class InstallGenerator < Rails::Generators::Base
6
+ class_option :webrat, :desc => 'Use Webrat.', :type => :boolean
7
+ class_option :capybara, :desc => 'Use Capybara.', :type => :boolean
8
+
9
+ source_root File.join(File.dirname(__FILE__), 'templates')
10
+
11
+ desc <<-DESC
12
+ Description:
13
+ Sets up Saki in your Rails project. This will generate the
14
+ spec/acceptance directory and the necessary files.
15
+
16
+ If you haven't already, You should also run
17
+ `rails generate rspec:install` to complete the set up.
18
+
19
+ Examples:
20
+ `rails generate saki:install`
21
+ DESC
22
+
23
+ def initialize(args=[], options={}, config={})
24
+ puts "Defaulting to Capybara..." if options.empty?
25
+ super
26
+ end
27
+
28
+ def manifest
29
+ empty_directory "spec/#{AcceptanceDir}/support"
30
+ template "acceptance_helper.rb", "spec/#{AcceptanceDir}/acceptance_helper.rb"
31
+ copy_file "helpers.rb", "spec/#{AcceptanceDir}/support/helpers.rb"
32
+ end
33
+
34
+ def driver
35
+ @driver = options.webrat? ? 'webrat' : 'capybara'
36
+ end
37
+ end
38
+ end
39
+
@@ -0,0 +1,28 @@
1
+ require File.dirname(__FILE__) + "/../spec_helper"
2
+
3
+ <%- if driver == 'webrat' %>
4
+ require "webrat"
5
+
6
+ Webrat.configure do |config|
7
+ config.mode = :rack
8
+ end
9
+
10
+ module Saki::Webrat
11
+ include Rack::Test::Methods
12
+ include Webrat::Methods
13
+ include Webrat::Matchers
14
+ def app
15
+ Rails.application
16
+ end
17
+ end
18
+
19
+ RSpec.configuration.include Saki::Webrat, :type => :acceptance
20
+
21
+ <%- else -%>
22
+ require 'capybara/rails'
23
+
24
+ RSpec.configuration.include Capybara, :type => :acceptance
25
+ <%- end -%>
26
+
27
+ # Put your acceptance spec helpers inside /spec/acceptance/support
28
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
@@ -0,0 +1,6 @@
1
+ module HelperMethods
2
+ # Put helper methods you need to be available in all tests here.
3
+ end
4
+
5
+ RSpec.configuration.include HelperMethods, :type => :acceptance
6
+
@@ -1,3 +1,5 @@
1
+ require 'rspec/core'
2
+
1
3
  module Saki
2
4
  module AcceptanceHelpers
3
5
  extend ActiveSupport::Concern
@@ -123,9 +125,13 @@ module Saki
123
125
  end
124
126
  end
125
127
 
126
- def where(closure, &block)
128
+ def where(executable, &block)
127
129
  context "anonymous closure" do
128
- before { instance_eval &closure }
130
+ if executable.is_a? Symbol
131
+ before { send executable }
132
+ else
133
+ before { instance_eval &executable }
134
+ end
129
135
  module_eval &block
130
136
  end
131
137
  end
@@ -133,4 +139,14 @@ module Saki
133
139
  end
134
140
  end
135
141
 
142
+ module RSpec::Core::ObjectExtensions
143
+ def integrate(*args, &block)
144
+ args << {} unless args.last.is_a?(Hash)
145
+ args.last.update :type => :acceptance
146
+ describe(*args, &block)
147
+ end
148
+ end
149
+
150
+
151
+
136
152
  RSpec.configuration.include Saki::AcceptanceHelpers, :type => :acceptance
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{saki}
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nate Kidwell"]
@@ -23,6 +23,9 @@ Gem::Specification.new do |s|
23
23
  "README.markdown",
24
24
  "Rakefile",
25
25
  "VERSION",
26
+ "lib/generators/saki/install_generator.rb",
27
+ "lib/generators/saki/templates/acceptance_helper.rb",
28
+ "lib/generators/saki/templates/helpers.rb",
26
29
  "lib/saki.rb",
27
30
  "saki.gemspec",
28
31
  "test/helper.rb",
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saki
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nate Kidwell
@@ -48,6 +48,9 @@ files:
48
48
  - README.markdown
49
49
  - Rakefile
50
50
  - VERSION
51
+ - lib/generators/saki/install_generator.rb
52
+ - lib/generators/saki/templates/acceptance_helper.rb
53
+ - lib/generators/saki/templates/helpers.rb
51
54
  - lib/saki.rb
52
55
  - saki.gemspec
53
56
  - test/helper.rb