Module: Wukong::SpecHelpers
- Includes:
- IntegrationTests, UnitTests
- Defined in:
- lib/wukong/spec_helpers.rb,
lib/wukong/spec_helpers/unit_tests.rb,
lib/wukong/spec_helpers/integration_tests.rb,
lib/wukong/spec_helpers/unit_tests/unit_test_driver.rb,
lib/wukong/spec_helpers/unit_tests/unit_test_runner.rb,
lib/wukong/spec_helpers/unit_tests/unit_test_matchers.rb,
lib/wukong/spec_helpers/integration_tests/integration_test_runner.rb,
lib/wukong/spec_helpers/integration_tests/integration_test_matchers.rb
Overview
This module lets you use write processor specs at a high level. Require it in your spec_helper.rb file:
# in your spec/spec_helper.rb
require 'wukong/spec_helpers'
RSpec.configure do |config|
include Wukong::SpecHelpers
end
Processors in a Wukong spec will have a collection of given_* methods you can use to (lazily) feed them records without having to have to build your own driver to run the processors.
To each given_* method corresponds an emit_*
matcher which will actually run the processor on the given
inputs and compare against expected results. Here's an example,
using a simple tokenizer processor.
subject { processor(:tokenizer) }
it "emits each word in a given string" do
given("It was the best of times, it was the worst of times.").should emit(12).records
end
# Give similar input and check against explicit expected
# output.
it "should ignore punctuation and capitalization" do
processor.given("You're crazy!").should emit("youre", "crazy")
end
# Pass the input but transform to JSON first (delimited and
# as_tsv also work).
it "should tokenize the 'text' attribute of a record if given JSON" do
processor.given("text" => "Will be cast to JSON").as_json.should emit("will", "be", "cast", "to", "json")
end
# Initialize the :tokenizer processor with arguments to test
# behavior under different conditions.
it "should output a single record when asked for JSON output" do
processor(:json => true).given("It was the best of times, it was the worst of times.").should emit(1).records
end
# Initialize processor with arguments and express that the
# expected output will be in JSON though given as an object.
it "should output all the tokens for its input record with its JSON output" do
processor(:json => true).given("You're crazy!").should emit("tokens" => ["youre", "crazy"]).as_json
end
# Initialize processor with arguments, and both input and
# output will be serialized/deserialized to/from JSON
# automatically.
it "can read and write pure JSON" do
processor(:json => true).given("text" => "You're crazy!").as_json.should emit("tokens" => ["youre", "crazy"]).as_json
end
# Use a processor outside the scope of the top-level :describe
# block.
it "has a friend which does the same thing" do
processor(:similar_tokenizer, :json => true).given("hi there").should emit(2).records
end
Defined Under Namespace
Modules: IntegrationTests, UnitTests Classes: CsvMatcher, DelimitedMatcher, ExitCodeMatcher, IntegrationTestMatcher, IntegrationTestRunner, JsonMatcher, StderrMatcher, StdoutMatcher, TsvMatcher, UnitTestDriver, UnitTestMatcher, UnitTestRunner
Method Summary
Methods included from IntegrationTests
#bin_dir, #command, #examples_dir, #exit_with, #have_stderr, #have_stdout, #integration_cwd, #integration_env, #lib_dir
Methods included from UnitTests
#emit, #emit_csv, #emit_delimited, #emit_json, #emit_tsv, #runner, #unit_test_runner