Wow, great news. Not certain yet how to configure GivenSories'
PathCalculator and StoryLoader to work with gdocs, but I'll figure it out
and report on findings.

Many thanks for the feedback. I hope to contribute to the codebase this
regard...

If you allow a comment: compared to the clean and natural gherkin wording,
GivenStories syntax (scenario id, parameter passing) appears a bit clumsy
and techy.
2013.07.09. 16:18, "Mauro Talevi" <mauro.tal...@aquilonia.org> ezt írta:

> This is already planned in JBEHAVE-923.
>
>
> On 9 Jul 2013, at 14:01, Czigola Gábor <czig...@gmail.com> wrote:
>
> Looks like a very promising direction. I see some limitations though:
>
> - Embedding occurs on a story level wherbey I've seen the need for
> embedding only particular scenarios in part or in full. (E.g. a login.story
> file would include various login scenarios wherby you are looking forward
> to include only a single scenario that logs you in and does nothing more.)
>
> - It is heavy coupling to introduce path/file names in the story files.
> What if StoryText is not loaded from the classpath, not boundled with the
> test framework but provided by google docs or other means? Where are these
> paths referring to?
>
> Would it make sense to introduce GivenScenario and not to use a path to
> reference it? (Reference by name, tag instead.)
>
> Thx,
> Gabor
> 2013.07.09. 12:18, "Cristiano Gavião" <cvgav...@gmail.com> ezt írta:
>
>>  maybe I didn't understand your need properly.
>>
>> but why not to use  parametrized given-stories [1] for login ?
>>
>> regards,
>>
>> Cristiano
>>
>>
>> [1]-http://jbehave.org/reference/latest/given-stories.html
>>
>> On 09/07/13 07:03, Gabor Czigola wrote:
>>
>> Hi Fellows,
>>
>>  There is a dilemma I stumbled upon multiple times while implementing
>> BDD testing:
>>
>>  Scenario: login.
>>
>>  Given I navigato to the landing page
>> Given I enter USER into #username
>> Given I enter PASS into #password
>>  When I click #login
>> Then I have #profileDiv
>>
>>  So far so good. This works excellent. However, many if not most of your
>> scenarios will start by logging in first. You are confronted with a choice:
>> either copy paste these lines everywhere (DRY?!), or implement login as a
>> single step.
>>
>>  Scenario: logout.
>>
>>  Given I'm logged in as "USER", "PASS"
>> When I click on #logout
>> Then I have #loginDiv
>>
>>  I've experience this latter as a definitive antipattern: it fights the
>> very purpose of JBehave, the ability to define the accepted behaviour as
>> atomic steps in the gherkin language. Testers tend to write smelly code,
>> pushing down this sort of logic into the implementation results in bad
>> maintainability and bad test quality. You end up with different
>> implementations for the same (sub)scenarios, and performing something
>> non-atomic in one step can shadow bugs.
>>
>>  What I could think of as a solution and enhancement to JBehave are
>> embeddable step definitions:
>>
>>  Definition: authenticate.
>>
>>  Given I navigato to the landing page
>> Given I enter USER into #username
>> Given I enter PASS into #password
>> When I click #login
>>
>>  Scenario: login works.
>>
>>  Subsumed authenticate.
>> Then I have #profileDiv
>>
>>  Scenario: logout works.
>>
>>  Subsumed authenticate.
>>  When I click on #logout
>> Then I have #loginDiv
>>
>>  IMHO this would be a relatively cheap and backwards compatible change
>> in JBehave but a significant gain. It would simplify and improve what is
>> possible in stories. It would make the definitions more re-usable,
>> extendible and maintainable.
>>
>>  Additional considerations:
>>
>>  - Proper naming and conventions for "Definition" (same as scenario,
>> only not executed only when subsumed elsewhere) and "Subsumed".
>>
>>  - Be able to parametrize subsumtions, or pass example parameters from
>> the scenario to the subsumed definition.
>> Subsumed authenticate.
>>  | USER | PASS |
>> | xyxy | xyxy |
>>
>>  - Take subsumtions into account when generating reports (just execute
>> included steps as if they were part of the original scenario, but indent
>> the results)
>>
>>  - This must not bring Turing-completeness to gherkin. This is like a
>> pre-processor substitution, not partial recursion. Infinite includes can be
>> simply avoided by maintaining a set of subsumed definitions along the
>> chain, throwing an error upon a duplicate.
>>
>>  What do you think? Has this been discussed before? What problems, side
>> effects do you see? Do you think this could be an useful improvement?
>>
>>  Have been looking into the source, it takes time but I could implement
>> it with ease. (Requires change in the parser, embedder, reporter, tests,
>> documentation and examples.)
>>
>>  Regards,
>> Gábor Czigola
>>
>>
>>

Reply via email to