Jake Benilov
2008-Oct-18 16:13 UTC
[rspec-users] Problems when programmatically defining examples
Hi, I am trying to code an application that is based on Rspec; I am programmatically building examples, and launching the runner with a custom formatter. Here are the code snippets from my app: Launching the runner: example_groups test_expectation.example_groups_for(system_state) @output = StringIO.new options = Spec::Runner::OptionParser.parse(["--format", "RAutotest::Runner::Formatter"], @output, @output) example_groups.each {|example_group| options.add_example_group(example_group) } Spec::Runner::CommandLine.run(options) Building the example groups: examples Class.new(Spec::Example::ExampleGroup).describe("Statistics") @expectations.map do |expectation| examples.it examples.description do actual_stats_counters.should expectation end end examples This is working fine, except for one problem. When I am writing examples for my app (also using rspec), the examples that are generated within my application (the inner examples, so to say) are being added to the application''s examples (the outer examples). This means that if inner expected failures are causing my outer examples to fail. How is it possible for me to verify expected failures without causing my examples to fail? Thanks in advance, Jake -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20081018/cd7db7f7/attachment.html>
David Chelimsky
2008-Oct-18 16:50 UTC
[rspec-users] Problems when programmatically defining examples
On Sat, Oct 18, 2008 at 2:13 PM, Jake Benilov <benilov at gmail.com> wrote:> Hi, > > I am trying to code an application that is based on Rspec; I am > programmatically building examples, and launching the runner with a custom > formatter. Here are the code snippets from my app: > > Launching the runner: > > example_groups > test_expectation.example_groups_for(system_state) > > @output = StringIO.new > options = Spec::Runner::OptionParser.parse(["--format", > "RAutotest::Runner::Formatter"], @output, @output) > example_groups.each {|example_group| > options.add_example_group(example_group) } > > Spec::Runner::CommandLine.run(options) > > Building the example groups: > > examples > Class.new(Spec::Example::ExampleGroup).describe("Statistics") > @expectations.map do |expectation| > examples.it examples.description do > actual_stats_counters.should expectation > end > end > examples > > This is working fine, except for one problem. When I am writing examples for > my app (also using rspec), the examples that are generated within my > application (the inner examples, so to say) are being added to the > application''s examples (the outer examples). > This means that if inner expected failures are causing my outer examples to > fail. > > How is it possible for me to verify expected failures without causing my > examples to fail?If I understand your question correctly, you can do this: lambda { # stuff that should fail }.should raise_error(Spec::Expectations::ExpectationNotMetError) See http://rspec.rubyforge.org/rspec/1.1.8/classes/Spec/Matchers.html#M000434 for more info. Cheers, David> > Thanks in advance, > Jake > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
Jake Benilov
2008-Oct-18 22:34 UTC
[rspec-users] Problems when programmatically defining examples
David, Thanks for your reply; however I probably wasn''t very clear in my explanation. What I am really trying to do is to create a builder for example group objects, without automatically adding the example groups to the rspec runner when the builder code is invoked. As an example, when I call the following code: describe "a group" do examples = Class.new(Spec::Example::ExampleGroup).describe("example") examples.it "should not be added to the outer group" do true.should be_false end end I get: ~~~ 1) ''example should not be added to the outer group'' FAILED expected false, got true Finished in 0.027012 seconds 1 example, 1 failure ~~~ This is probably expected, but what I really want is that the "examples" example group is NOT picked up by rspec. I suppose that I need to stay away from the "it" and "describe" methods... right? Regards, Jake On Sat, Oct 18, 2008 at 6:50 PM, David Chelimsky <dchelimsky at gmail.com>wrote:> On Sat, Oct 18, 2008 at 2:13 PM, Jake Benilov <benilov at gmail.com> wrote: > > Hi, > > > > I am trying to code an application that is based on Rspec; I am > > programmatically building examples, and launching the runner with a > custom > > formatter. Here are the code snippets from my app: > > > > Launching the runner: > > > > example_groups > > test_expectation.example_groups_for(system_state) > > > > @output = StringIO.new > > options = Spec::Runner::OptionParser.parse(["--format", > > "RAutotest::Runner::Formatter"], @output, @output) > > example_groups.each {|example_group| > > options.add_example_group(example_group) } > > > > Spec::Runner::CommandLine.run(options) > > > > Building the example groups: > > > > examples > > Class.new(Spec::Example::ExampleGroup).describe("Statistics") > > @expectations.map do |expectation| > > examples.it examples.description do > > actual_stats_counters.should expectation > > end > > end > > examples > > > > This is working fine, except for one problem. When I am writing examples > for > > my app (also using rspec), the examples that are generated within my > > application (the inner examples, so to say) are being added to the > > application''s examples (the outer examples). > > This means that if inner expected failures are causing my outer examples > to > > fail. > > > > How is it possible for me to verify expected failures without causing my > > examples to fail? > > If I understand your question correctly, you can do this: > > lambda { > # stuff that should fail > }.should raise_error(Spec::Expectations::ExpectationNotMetError) > > See > http://rspec.rubyforge.org/rspec/1.1.8/classes/Spec/Matchers.html#M000434 > for more info. > > Cheers, > David > > > > > Thanks in advance, > > Jake > > > > _______________________________________________ > > rspec-users mailing list > > rspec-users at rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20081019/7062174f/attachment-0001.html>
Zach Dennis
2008-Oct-19 01:24 UTC
[rspec-users] Problems when programmatically defining examples
On Sat, Oct 18, 2008 at 6:34 PM, Jake Benilov <benilov at gmail.com> wrote:> David, > > Thanks for your reply; however I probably wasn''t very clear in my > explanation. What I am really trying to do is to create a builder for > example group objects, without automatically adding the example groups to > the rspec runner when the builder code is invoked. > > As an example, when I call the following code: > > describe "a group" do > examples = Class.new(Spec::Example::ExampleGroup).describe("example") > examples.it "should not be added to the outer group" do > true.should be_false > end > endWhen you create a subclass of Spec:Example::ExampleGroup, it automatically gets registered. You want to make sure you unregister it so rspec''s Runner doesn''t try to run it. Try this: describe "a group" do example_group = Class.new(Spec::Example::ExampleGroup) example_group.unregister examples = example_group.describe("example") examples.it "should not be added to the outer group" do true.should be_false end end> > I get: > ~~~ > 1) > ''example should not be added to the outer group'' FAILED > expected false, got true > > Finished in 0.027012 seconds > > 1 example, 1 failure > ~~~ > This is probably expected, but what I really want is that the "examples" > example group is NOT picked up by rspec. I suppose that I need to stay away > from the "it" and "describe" methods... right? > > Regards, > Jake > > On Sat, Oct 18, 2008 at 6:50 PM, David Chelimsky <dchelimsky at gmail.com> > wrote: >> >> On Sat, Oct 18, 2008 at 2:13 PM, Jake Benilov <benilov at gmail.com> wrote: >> > Hi, >> > >> > I am trying to code an application that is based on Rspec; I am >> > programmatically building examples, and launching the runner with a >> > custom >> > formatter. Here are the code snippets from my app: >> > >> > Launching the runner: >> > >> > example_groups >> > test_expectation.example_groups_for(system_state) >> > >> > @output = StringIO.new >> > options = Spec::Runner::OptionParser.parse(["--format", >> > "RAutotest::Runner::Formatter"], @output, @output) >> > example_groups.each {|example_group| >> > options.add_example_group(example_group) } >> > >> > Spec::Runner::CommandLine.run(options) >> > >> > Building the example groups: >> > >> > examples >> > Class.new(Spec::Example::ExampleGroup).describe("Statistics") >> > @expectations.map do |expectation| >> > examples.it examples.description do >> > actual_stats_counters.should expectation >> > end >> > end >> > examples >> > >> > This is working fine, except for one problem. When I am writing examples >> > for >> > my app (also using rspec), the examples that are generated within my >> > application (the inner examples, so to say) are being added to the >> > application''s examples (the outer examples). >> > This means that if inner expected failures are causing my outer examples >> > to >> > fail. >> > >> > How is it possible for me to verify expected failures without causing my >> > examples to fail? >> >> If I understand your question correctly, you can do this: >> >> lambda { >> # stuff that should fail >> }.should raise_error(Spec::Expectations::ExpectationNotMetError) >> >> See >> http://rspec.rubyforge.org/rspec/1.1.8/classes/Spec/Matchers.html#M000434 >> for more info. >> >> Cheers, >> David >> >> > >> > Thanks in advance, >> > Jake >> > >> > _______________________________________________ >> > rspec-users mailing list >> > rspec-users at rubyforge.org >> > http://rubyforge.org/mailman/listinfo/rspec-users >> > >> _______________________________________________ >> rspec-users mailing list >> rspec-users at rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-- Zach Dennis http://www.continuousthinking.com http://www.mutuallyhuman.com
Jake Benilov
2008-Oct-19 17:40 UTC
[rspec-users] Problems when programmatically defining examples
Hi Zach, That worked a treat. Thanks! Regards, Jake On Sun, Oct 19, 2008 at 3:24 AM, Zach Dennis <zach.dennis at gmail.com> wrote:> On Sat, Oct 18, 2008 at 6:34 PM, Jake Benilov <benilov at gmail.com> wrote: > > David, > > > > Thanks for your reply; however I probably wasn''t very clear in my > > explanation. What I am really trying to do is to create a builder for > > example group objects, without automatically adding the example groups to > > the rspec runner when the builder code is invoked. > > > > As an example, when I call the following code: > > > > describe "a group" do > > examples = Class.new(Spec::Example::ExampleGroup).describe("example") > > examples.it "should not be added to the outer group" do > > true.should be_false > > end > > end > > When you create a subclass of Spec:Example::ExampleGroup, it > automatically gets registered. You want to make sure you unregister it > so rspec''s Runner doesn''t try to run it. Try this: > > describe "a group" do > example_group = Class.new(Spec::Example::ExampleGroup) > example_group.unregister > examples = example_group.describe("example") > examples.it "should not be added to the outer group" do > true.should be_false > end > end > > > > > > > I get: > > ~~~ > > 1) > > ''example should not be added to the outer group'' FAILED > > expected false, got true > > > > Finished in 0.027012 seconds > > > > 1 example, 1 failure > > ~~~ > > This is probably expected, but what I really want is that the "examples" > > example group is NOT picked up by rspec. I suppose that I need to stay > away > > from the "it" and "describe" methods... right? > > > > Regards, > > Jake > > > > On Sat, Oct 18, 2008 at 6:50 PM, David Chelimsky <dchelimsky at gmail.com> > > wrote: > >> > >> On Sat, Oct 18, 2008 at 2:13 PM, Jake Benilov <benilov at gmail.com> > wrote: > >> > Hi, > >> > > >> > I am trying to code an application that is based on Rspec; I am > >> > programmatically building examples, and launching the runner with a > >> > custom > >> > formatter. Here are the code snippets from my app: > >> > > >> > Launching the runner: > >> > > >> > example_groups > >> > test_expectation.example_groups_for(system_state) > >> > > >> > @output = StringIO.new > >> > options > Spec::Runner::OptionParser.parse(["--format", > >> > "RAutotest::Runner::Formatter"], @output, @output) > >> > example_groups.each {|example_group| > >> > options.add_example_group(example_group) } > >> > > >> > Spec::Runner::CommandLine.run(options) > >> > > >> > Building the example groups: > >> > > >> > examples > >> > Class.new(Spec::Example::ExampleGroup).describe("Statistics") > >> > @expectations.map do |expectation| > >> > examples.it examples.description do > >> > actual_stats_counters.should expectation > >> > end > >> > end > >> > examples > >> > > >> > This is working fine, except for one problem. When I am writing > examples > >> > for > >> > my app (also using rspec), the examples that are generated within my > >> > application (the inner examples, so to say) are being added to the > >> > application''s examples (the outer examples). > >> > This means that if inner expected failures are causing my outer > examples > >> > to > >> > fail. > >> > > >> > How is it possible for me to verify expected failures without causing > my > >> > examples to fail? > >> > >> If I understand your question correctly, you can do this: > >> > >> lambda { > >> # stuff that should fail > >> }.should raise_error(Spec::Expectations::ExpectationNotMetError) > >> > >> See > >> > http://rspec.rubyforge.org/rspec/1.1.8/classes/Spec/Matchers.html#M000434 > >> for more info. > >> > >> Cheers, > >> David > >> > >> > > >> > Thanks in advance, > >> > Jake > >> > > >> > _______________________________________________ > >> > rspec-users mailing list > >> > rspec-users at rubyforge.org > >> > http://rubyforge.org/mailman/listinfo/rspec-users > >> > > >> _______________________________________________ > >> rspec-users mailing list > >> rspec-users at rubyforge.org > >> http://rubyforge.org/mailman/listinfo/rspec-users > > > > > > _______________________________________________ > > rspec-users mailing list > > rspec-users at rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > > -- > Zach Dennis > http://www.continuousthinking.com > http://www.mutuallyhuman.com > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20081019/ab70e16e/attachment-0001.html>