All Versions
5
Latest Version
Avg Release Cycle
7 days
Latest Release
2768 days ago

Changelog History

  • v0.0.3 Changes

    September 27, 2016

    Exkorpion

    โœ… An Elixir framework to do testing in a BDD way

    Installation

    ๐Ÿ“ฆ Library is available in Hex, the package can be installed as:

    โž• Add exkorpion to your list of dependencies in mix.exs:

    def deps do [{:exkorpion, "~\> 0.0.2"}]end
    

    In case of you don't have a elixir environment ready to code, please have a look at the below links:

    Exkorpion goals

    • It wraps ExUnit and enhances their features providing developers with a BDD syntax.
    • โœ… It helps us to write tests wasy-to-read.
    • It is completely compatible with ExUnit.
    • โœ… It force us to structure our tests in steps (given-when-then)
    • โœ… It is based on a functional syntax, organization our tests steps by anonymous functions.
    • It is not coupled to any other framework.

    Getting started

    Exkorpion syntax

    As was mentioned on the above Exkorpion is mainly oriented to a bdd syntax:

    scenario : A scenario groups multiple cases that test a functionality works as expected. By using scenario we achieve the below:

    • ๐Ÿ‘ Better documentation for other developers.
    • โœ… Test are better organized and structured
    • Working under an agile methodology we can match scenarios to acceptance criteria

    it : Exkorpion provide with a reserved word It to represent any of the cases inside a scenario.

     scenario "testing sum operation works as expected" do it "sum positive numbers works as expected" doend it "sum negative numbers and it should work as expected" doendend
    

    with/given/when/then : These word are the ones that provide us with s BDD syntax. Actually even when we write some unit tests we should thinkg about them.

    Given: It defines the input data for performing the tests. (It's an optional step, it could be not neccessary sometimes)

    When: It performs the action to be tested.

    Then: It ensures the result in the preoviuos step are the expected.

     it "Ensures that get tracks service returns always 2 elements" do %{ when: fn \_ -\> %{result: build\_conn() |\> get("/tracks", "v1") |\> json\_response |\> Poison.decode! } end, then: fn ctx -\> assert 2 === length(ctx.result) end } end
    

    we could make us of with* step if we pretend to run the some tests for multiple input

     it "Ensures that add new track service works as expected" do %{ with: fn ctx -\> [%{new\_track: %{"title" =\> "Runaway", "singer" =\> "John Bon Jovi"}}, %{new\_track: %{"title" =\> "Let her go", "singer" =\> "The passenger"}},] end, given: &(%{new\_track\_json: &1.new\_track |\> Poison.encode!, previous\_tracks: build\_conn() |\> get("/tracks", "v1") |\> json\_response |\> Poison.decode! }), when: fn ctx -\> %{result: build\_conn() |\> put\_body\_or\_params(ctx.new\_track) |\> post("/tracks", "v1") |\> json\_response |\> Poison.decode! } end, then: fn ctx -\> assert length(ctx.previous\_tracks)+1 === length(ctx.result) assert true === Enum.member?(ctx.result, ctx.new\_track) end } end
    

    before_each : Before each will be inside of a scenario and provices with a reusable set of data for our tests.

     scenario "testing sum operation works as expected" do before\_each do %{a: 10} end it "sum positive numbers works as expected" do %{ given: &(%{a: &1.a, b: 3}), when: &(%{c: &1.a + &1.b}), then: fn ctx -\> assert ctx.c === 13end } end it "sum negative numbers and it should work as expected" do %{ given: &(%{a: &1.a, b: -2}), when: &(%{c: sum(&1.a ,&1.b)}), then: fn ctx -\> assert ctx.c === 8end } endend
    

    First steps

    Once we have added exkorpion dependency to our test we can run the below command. This will creae a scenario directory on our poejct with a file named scenario_helper.exs.

     mix exkorpion.init
    

    By default Exkorpion will search files ended by " .._scenario.exs" inside directory scenarios. This could be easyly customized (We explain in following articles.)

    We can write one or more scenarios per file

    To run the exkorpion scenarios we just need to run

    MIX\_ENV=test mix exkorpion
    

    โœ… Exkorpion provides with a friendly resume about our tests execution.

    Success execution
    exkorpion success

    Something went wrong!
    exkorpion error

    Samples

    It's highly recommendable you to have a look at some samples already developed:

    Contributors

  • v0.0.2 Changes

    September 13, 2016

    ๐Ÿ— Build Status
    ๐Ÿ“ฆ Hex version
    Hex downloads

    Exkorpion

    โœ… An Elixir framework to do testing in a BDD way

    Installation

    ๐Ÿ“ฆ Library is available in Hex, the package can be installed as:

    โž• Add exkorpion to your list of dependencies in mix.exs:

    def deps do [{:exkorpion, "~\> 0.0.2"}]end
    

    In case of you don't have a elixir environment ready to code, please have a look at the below links:

    Exkorpion goals

    • It wraps ExUnit and enhances their features providing developers with a BDD syntax.
    • โœ… It helps us to write tests wasy-to-read.
    • It is completely compatible with ExUnit.
    • โœ… It force us to structure our tests in steps (given-when-then)
    • โœ… It is based on a functional syntax, organization our tests steps by anonymous functions.
    • It is not coupled to any other framework.

    Getting started

    Exkorpion syntax

    As was mentioned on the above Exkorpion is mainly oriented to a bdd syntax:

    scenario : A scenario groups multiple cases that test a functionality works as expected. By using scenario we achieve the below:

    • ๐Ÿ‘ Better documentation for other developers.
    • โœ… Test are better organized and structured
    • Working under an agile methodology we can match scenarios to acceptance criteria

    it : Exkorpion provide with a reserved word It to represent any of the cases inside a scenario.

     scenario "testing sum operation works as expected" do it "sum positive numbers works as expected" doend it "sum negative numbers and it should work as expected" doendend
    

    with/given/when/then : These word are the ones that provide us with s BDD syntax. Actually even when we write some unit tests we should thinkg about them.

    Given: It defines the input data for performing the tests. (It's an optional step, it could be not neccessary sometimes)

    When: It performs the action to be tested.

    Then: It ensures the result in the preoviuos step are the expected.

     it "Ensures that get tracks service returns always 2 elements" do %{ when: fn \_ -\> %{result: build\_conn() |\> get("/tracks", "v1") |\> json\_response |\> Poison.decode! } end, then: fn ctx -\> assert 2 === length(ctx.result) end } end
    

    we could make us of with* step if we pretend to run the some tests for multiple input

     it "Ensures that add new track service works as expected" do %{ with: fn ctx -\> [%{new\_track: %{"title" =\> "Runaway", "singer" =\> "John Bon Jovi"}}, %{new\_track: %{"title" =\> "Let her go", "singer" =\> "The passenger"}},] end, given: &(%{new\_track\_json: &1.new\_track |\> Poison.encode!, previous\_tracks: build\_conn() |\> get("/tracks", "v1") |\> json\_response |\> Poison.decode! }), when: fn ctx -\> %{result: build\_conn() |\> put\_body\_or\_params(ctx.new\_track) |\> post("/tracks", "v1") |\> json\_response |\> Poison.decode! } end, then: fn ctx -\> assert length(ctx.previous\_tracks)+1 === length(ctx.result) assert true === Enum.member?(ctx.result, ctx.new\_track) end } end
    

    beforeEach : Before each will be inside of a scenario and provices with a reusable set of data for our tests.

     scenario "testing sum operation works as expected" do beforeEach do %{a: 10} end it "sum positive numbers works as expected" do %{ given: &(%{a: &1.a, b: 3}), when: &(%{c: &1.a + &1.b}), then: fn ctx -\> assert ctx.c === 13end } end it "sum negative numbers and it should work as expected" do %{ given: &(%{a: &1.a, b: -2}), when: &(%{c: sum(&1.a ,&1.b)}), then: fn ctx -\> assert ctx.c === 8end } endend
    

    First steps

    Once we have added exkorpion dependency to our test we can run the below command. This will creae a scenario directory on our poejct with a file named scenario_helper.exs.

     mix exkorpion.init
    

    By default Exkorpion will search files ended by " .._scenario.exs" inside directory scenarios. This could be easyly customized (We explain in following articles.)

    We can write one or more scenarios per file

    To run the exkorpion scenarios we just need to run

    MIX\_ENV=test mix exkorpion
    

    โœ… Exkorpion provides with a friendly resume about our tests execution.

    Success execution
    exkorpion success

    Something went wrong!
    exkorpion error

    Samples

    It's highly recommendable you to have a look at some samples already developed:

    Contributors

  • v0.0.2-rc.2 Changes

    September 07, 2016

    ๐Ÿ› Bug Fixes

    There was not bug detected for previous version.
    

    ๐Ÿ”จ Code Refactoring

    None
    

    ๐Ÿ”‹ Features

    • Providing a Exkopion site on Exkorpion site, still in draft
    • Full integration with ExUnit
    • โž• Add table resume after tests are executed

    TODO

    • ๐Ÿš€ Re-factor code (Very mandatory for next release), Specially function print_resume in task exkorpion.
  • v0.0.2-rc.1 Changes

    September 02, 2016

    Exkorpion

    โœ… Exkorpion is a framework that will help developers to write tests in a BDD form.

    Installation

    ๐Ÿ“ฆ Library is available in Hex, the package can be installed as:

    โž• Add exkorpion to your list of dependencies in mix.exs:

    def deps do [{:exkorpion, "~\> 0.0.2-rc.1"}]end
    

    Ensure exkorpion is started before your application:

    def application do [applications: [:exkorpion]]end
    

    Getting started with Exkorpion

    โœ… Wrapping ExUnit to achieve a BDD syntax for our tests.

    Below you can find some very basic examples of how to use Exkorpion

    defmodule Exkorpion.MathExamplesTest douse Exkorpiondef sum a, b do a + b enddef subs a, b do a - b end scenario "testing sum operation works as expected" do beforeEach do %{a: 12} end it "does multiple operations depending on vairable input" do %{ with: fn ctx -\> [%{param1: ctx.a, param2: 3, result: 15, op: fn a,b -\> sum(a,b) end}, %{param1: 3, param2: -2, result: 5, op: fn a,b -\> subs(a,b) end}] end, given: fn ctx -\> %{a: ctx.param1, b: ctx.param2} end, when: &(%{c: &1.op.(&1.a ,&1.b)}), then: fn ctx -\> assert ctx.c === ctx.result end } endend scenario "testing sum operation works as expected 2" do beforeEach do %{a: 10} end it "sum positive numbers works as expected" do %{ given: &(%{a: &1.a, b: 3}), when: &(%{c: &1.a + &1.b}), then: fn ctx -\> assert ctx.c === 13end } end it "sum negative numbers and it should work as expected" do %{ given: &(%{a: &1.a, b: -2}), when: &(%{c: sum(&1.a ,&1.b)}), then: fn ctx -\> assert ctx.c === 8end } endendend
    

    How to run

    • Make a *scenarios directory in your project
    • Add files with sufix _scenario.ex or _scenario.exs
    • โœ… Implementing some test as example above.
    • Run command MIX_ENV=test mix exkorpion

    Project status

    • ๐Ÿ’… Improving coding style
    • Implementing new functionalities.
    • Detecting bugs and fixing them.
    • Waitign for feddback.

    Contributors

    Stable version

    0.0.1 is the stable version

    ๐Ÿ”„ CHANGELOG.md

    0.0.2-rc.1 (2016-09-02)

    ๐Ÿ› Bug Fixes

    There was not bug detected for previous version.
    

    ๐Ÿ”จ Code Refactoring

    • Applying best coding practice (trying at least XD)
    • โž• Adding credo to run static code analysis.

    ๐Ÿ”‹ Features

    • Adding beforeEach functionality
    • Raising Assertion Errors, better understanding of assertion errors
    • Adding exkorpion examples as part of this project
    • Creating a task that will allow us to run the tests by command mix exkorpion
  • v0.0.1 Changes

    August 29, 2016

    Exkorpion

    โœ… Exkorpion is a framework that will help developers to write tests in a BDD form.

    Installation

    ๐Ÿ“ฆ Library is available in Hex, the package can be installed as:

    โž• Add exkorpion to your list of dependencies in mix.exs:

    def deps do [{:exkorpion, "~\> 0.0.1"}]end
    

    Ensure exkorpion is started before your application:

    def application do [applications: [:exkorpion]]end
    

    Getting started with Exkorpion

    โœ… As was mentioned above Exkorpion is a test framework focused on helping developers to work under BDD. Then, as you could guess the syntax
    will look like Given-When-Then.

    Below you can find some very basic examples of how to use Exkorpion

    defmodule ExkorpionDemo.MathOperationsTest douse Exkorpiondef sum(a,b) do a + b enddef subs a, b do a - b end scenario "testing sum operation works as expected" do it "sum positive numbers works as expected" do %{ given: fn -\> %{a: 1, b: 2} end, when: fn ctx -\> %{c: ctx.a + ctx.b} end, then: fn ctx -\> assert ctx.c === 3end } end it "sum negative numbers and it should work as expected" do %{ given: fn-\> %{a: -1, b: -2} end, when: fn ctx -\> %{c: sum(ctx.a, ctx.b)} end, then: fn ctx -\> assert ctx.c === -3end } end it "does multiple operations depending on vairable input" do %{ with: fn -\> [%{param1: 2, param2: 3, result: 5}, %{param1: 3, param2: -2, result: 1}] end, given: fn ctx -\> %{a: ctx.param1, b: ctx.param2} end, when: fn ctx -\> %{c: sum(ctx.a, ctx.b)} end, then: fn ctx -\> assert ctx.c === ctx.result end } endendend
    

    โœ… In order to write new tests with Exkorpion, we need to consider the below:

    ๐Ÿ‘‰ 1. Add use Exkorpion after module declaration.

    1. A scenario will be compounds by one of multiple cases, which are represented by *it โœ… 3. So far, we can write two types of tests:
      • We can write basic tests with the required 3 steps: Given, When and Then and the tests will be performed in this order. An example of this
        type of tests can be found in the above example: it sum positive numbers works as expected and it does multiple operations depending on vairable input
      • We could extend the test by defining different inputs for the same tests. We can achieve by adding with to our map declaration, as we can see in
        it does multiple operations depending on vairable input

    Contributors