class Object
Public Instance Methods
From a scenario file, clones the attributes of an existing instance and overrides as specified.
@param [ActiveRecord::Base] resource An ActiveRecord Model instance @param [Hash] override_hash Hash of attributes / values to override from
@return [Hash] Hash of attributes from provided resource
@example Using __clone
# test/datum/scenarios/simpsons_scenario.rb # any code included in this file gets loaded when calling process_scenario @homer = Person.create(first_name: "Homer", last_name: "Simpson") @marge = Person.create(__clone(@homer, {first_name: "Marge"}))
# File lib/support/scenario.rb, line 40 def __clone resource, override_hash = nil ::Datum::Helpers.clone_resource resource, override_hash end
From a scenario file, imports an existing scenario’s code into the current Binding context of the current scenario.
@param [Symbol, String] scenario_name The name of a scenario file @return [void]
@example Using __import
# test/datum/scenarios/springfield_police_scenario.rb @clancy = Person.create(first_name: "Clancy", last_name: "Wiggum") @eddie = Person.create(first_name: "Eddie", last_name: "Police-Officer") # test/datum/scenarios/extended_simpsons_scenario.rb @homer = Person.create(first_name: "Homer", last_name: "Simpson") @marge = Person.create(__clone(@homer, {first_name: "Marge"})) @bart = Person.create(__clone(@homer, {first_name: "Marge"})) __import :springfield_police_scenario # will give us clancy, eddie # Using @eddie from imported :springfield_police_scenario to # define @lou's last_name @lou = Person.create first_name: "Lou", last_name: @eddie.last_name
# File lib/support/scenario.rb, line 23 def __import scenario_name ::Datum::Helpers.import_file scenario_name, ::Datum.scenario_path, binding end
Defines a test to work in conjuction with Datum
struct extensions found in a file with the same name in the test/datum/data directory
@param [String] name Name of the file in the datum/data directory @param [Block] block A block of Ruby code
@return [void]
@example Defining a data_test
# test/datum/data/simple_person_data.rb # first, define a sub-class of Datum to use in your test PersonData = Datum.new(:first_name, :last_name, :name, :short_name) # next, use your sub-class to create datasets which will be accessible to # your data_test as @datum # # your data can be generated, etc... here, we're keeping it simple homer = PersonData.new("Homer", "Simpson", "Homer Simpson", "Homer S.") marge = PersonData.new("Marge", homer.last_name, "Marge #{homer.last_name}", "Marge S.") # test/datum/scenarios/simpsons_scenario.rb @homer = Person.create(first_name: "Homer", last_name: "Simpson") @marge = Person.create(__clone(@homer, {first_name: "Marge"})) # test/models/person_test.rb require 'test_helper' class PersonTest < ActiveSupport::TestCase # this data method will be called once for each Datum defined in # test/datum/data/simple_person_data.rb # # each time this method is called @datum will reference the current # dataset data_test "simple_person_data" do process_scenario :simpsons_scenario person = self.instance_variable_get("@#{@datum.first_name.downcase}") assert_equal @datum.first_name, person.first_name assert_equal @datum.last_name, person.last_name assert_equal @datum.name, person.name assert_equal @datum.short_name, person.short_name end end
# File lib/support/test.rb, line 76 def data_test name, &block ::Datum::Container.new(name, self) self.send(:define_method, name, &block) self.class_eval(::Datum::Helpers.read_file(name, ::Datum.data_path)) end