MotionSpec
Specs are important! This project makes them a first-class citizen again.
RubyMotion is great at integrating them from the start, but
they aren't core to the RubyMotion workflow, and lag behind their distant
rspec
cousin (RubyMotion's specs are forked from MacBacon
, which is a port
of Bacon
which is a simplified version of rspec
).
Installation
Add this line to your app's Gemfile
:
gem 'motion-spec'
If your Rakefile
includes this line you're all set:
Bundler.require
Otherwise, you'll need to add this line to the top of your Rakefile
:
require 'motion-spec'
Usage
By Example
describe AwesomeClass do
it 'initializes with defaults' do
expect(AwesomeClass.new.attribute).to eq 'my default'
end
it { expect(true).to be_true }
context 'with a precondition' do
before { AwesomeClass.build_context }
after { AwesomeClass.reset_all }
let(:example_1) { AwesomeClass.new(foo: 'bar') }
subject { example_1.instance_function }
it { is_expected.to have_foo('bar') }
end
context 'stubbing a method' do
before { subject.stub!(:awesome_method, return: 'awesomeness') }
subject { AwesomeClass.new }
it { expect(subject.awesome_method).to eq 'awesomeness' }
end
end
mock!
vs stub!
mock!
ensures that the method is called (and removes the implementation when
it is), while stub!
simply replaces the method for the duration of the spec.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/jbender/motion-spec.