
Security News
Nx npm Packages Compromised in Supply Chain Attack Weaponizing AI CLI Tools
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.
#stendhal
A small test framework developed as a personal kata to improve my ruby.
Tested with Ruby 1.8.7, 1.9.2, JRuby 1.5.3 and Rubinius 1.1.
Currently under development, there is only basic functionality for now. Below I will be posting whatever features are available throughout the development.
##Current features
Pretty decent reporter with colors
Test doubles and stubs (also partial stubbing!)
Mocks (message expectations) with optionally stubbable return values
Nested example groups (declare them with either describe or context)
Pending examples
A rake task to run the specs
Matchers (use with object.must or object.must_not)
eq() / eql()
be_a() / be_kind_of() / be_a_kind_of()
be_whatever # asks object.whatever?
##Installation
gem install stendhal
##Usage
In your Gemfile:
gem 'stendhal'
If you want the :spec task, in your Rakefile:
require 'stendhal'
Stendhal::RakeTask.new
task :default => :spec
##Syntax
# your spec file for some class - foo_spec.rb
describe "Foo" do
it "does something" do
my_object = MyClass.new
my_object.must be_a(MyClass)
end
it "fails when 7 is not 9" do
(3 + 4).must eq(9)
end
it "asks for a kind of object" do
"string".must be_a(String)
end
it "asks things to objects" do
"string".must be_frozen
end
it "has common sense" do
"string".must_not eq(3)
end
describe "Pending examples" do
it "should do something but I don't know what yet"
pending "will do something else" do
my_object = MyClass.new
my_object.future_method
end
context "under some unknown circumstances" do
it "may act differently" do
MyClass.must be_a(Class)
end
end
end
describe "Test double" do
it "is declared with fake" do
my_logger = fake('logger')
end
it "is declared with double as well" do
my_logger = double('logger')
end
it "can be given stubs" do
my_logger = double('logger', :my_method => 6)
my_logger.my_method.must eq(6)
end
end
describe "Partial stubbing" do
it "returns nil by default" do
string = "my string"
string.stubs(:some_method)
string.some_method # => nil
end
it "returns a value if you tell it to" do
string = "my string"
string.stubs(:some_method) { 'some value' }
string.some_method # => "some value"
end
end
describe "Message expectation" do
it "is declared with expects" do
string = "my string"
string.expects(:reverse)
string.reverse # Expectation fulfilled!
end
it "can be told the number of times it is expected" do
string = "my string"
string.expects(:reverse).once # or
string.expects(:reverse).twice # or
string.expects(:reverse).exactly(3).times
string.reverse # Fails!
end
it "can return a stubbed value" do
string = "my string"
string.expects(:reverse).and_returns 'stubbed value'
string.reverse # => "stubbed value"
end
it "can return a stubbed proc" do
string = "my string"
string.expects(:reverse).and_returns do
3 + 4
end
string.reverse # => 7
end
it "is declared with does_not_expect in case it is negative" do
string = "my string"
string.does_not_expect(:reverse)
string.reverse # Fails!
end
end
end
###Running the specs!
stendhal foo_spec.rb
###And the nice colored output...
Foo
* does something
* fails when 7 is not 9 [FAILED]
expected 7 to equal 9
* asks for a kind of object
* asks things to objects [FAILED]
expected "string" to be frozen
* has common sense
Pending examples
* should do something but I don't know what yet
* will do something else
under some unknown circumstances
* may act differently
Test double
* is declared with fake
* is declared with double as well
* can be given stubs
Partial stubbing
* returns nil by default
* returns a value if you tell it to
Message expectation
* is declared with expects
* can be told the number of times it is expected [FAILED]
* can return a stubbed value
* can return a stubbed proc
* is declared with does_not_expect in case it is negative [FAILED]
18 examples, 4 failures, 2 pending
##Feedback
Reporting issues, asking for new features and constructive criticizing can be done either through Github issues, the mailing list (http://librelist.com/browser/stendhal/) or you can always reach me on twitter (I am @txustice). Don't hesitate to tell me anything! :)
##Note on Patches/Pull Requests
Copyright (c) 2010 Josep M. Bach. See LICENSE for details.
FAQs
Unknown package
We found that stendhal demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.
Security News
CISA’s 2025 draft SBOM guidance adds new fields like hashes, licenses, and tool metadata to make software inventories more actionable.
Security News
A clarification on our recent research investigating 60 malicious Ruby gems.