{"id":13471054,"url":"https://github.com/ma2gedev/power_assert_ex","last_synced_at":"2025-04-04T15:11:09.396Z","repository":{"id":45051272,"uuid":"43438784","full_name":"ma2gedev/power_assert_ex","owner":"ma2gedev","description":"Power Assert in Elixir. Shows evaluation results each expression.","archived":false,"fork":false,"pushed_at":"2023-01-04T13:17:22.000Z","size":269,"stargazers_count":214,"open_issues_count":1,"forks_count":6,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-28T14:11:09.214Z","etag":null,"topics":["assert","assertion-library","elixir","exunit","power-assert","testing-tools"],"latest_commit_sha":null,"homepage":"https://github.com/ma2gedev/power_assert_ex","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ma2gedev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-09-30T14:46:28.000Z","updated_at":"2025-02-24T11:53:48.000Z","dependencies_parsed_at":"2023-02-02T13:45:32.707Z","dependency_job_id":null,"html_url":"https://github.com/ma2gedev/power_assert_ex","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ma2gedev%2Fpower_assert_ex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ma2gedev%2Fpower_assert_ex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ma2gedev%2Fpower_assert_ex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ma2gedev%2Fpower_assert_ex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ma2gedev","download_url":"https://codeload.github.com/ma2gedev/power_assert_ex/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247198463,"owners_count":20900080,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["assert","assertion-library","elixir","exunit","power-assert","testing-tools"],"created_at":"2024-07-31T16:00:38.994Z","updated_at":"2025-04-04T15:11:09.378Z","avatar_url":"https://github.com/ma2gedev.png","language":"Elixir","funding_links":[],"categories":["Elixir","Testing"],"sub_categories":[],"readme":"# Power Assert\n\n[![hex.pm version](https://img.shields.io/hexpm/v/power_assert.svg)](https://hex.pm/packages/power_assert) [![hex.pm daily downloads](https://img.shields.io/hexpm/dd/power_assert.svg)](https://hex.pm/packages/power_assert) [![hex.pm weekly downloads](https://img.shields.io/hexpm/dw/power_assert.svg)](https://hex.pm/packages/power_assert) [![hex.pm downloads](https://img.shields.io/hexpm/dt/power_assert.svg)](https://hex.pm/packages/power_assert) [![Build Status](https://github.com/ma2gedev/power_assert_ex/workflows/Elixir%20CI/badge.svg?branch=master)](https://github.com/ma2gedev/power_assert_ex/actions?query=workflow%3A%22Elixir+CI%22) [![License](https://img.shields.io/hexpm/l/power_assert.svg)](http://www.apache.org/licenses/LICENSE-2.0)\n\nPower Assert makes test results easier to understand, without changing your ExUnit test code.\n\n![Demo](https://github.com/ma2gedev/power_assert_ex/raw/master/head.gif)\n\nExample test is here:\n\n```elixir\ntest \"Enum.at should return the element at the given index\" do\n  array = [1, 2, 3, 4, 5, 6]; index = 2; two = 2\n  assert array |\u003e Enum.at(index) == two\nend\n```\n\nHere is the difference between ExUnit and Power Assert results:\n\n![Difference between ExUnit and Power Assert](https://github.com/ma2gedev/power_assert_ex/raw/master/difference.png)\n\nEnjoy :muscle: !\n\n## Installation\n\nAdd Power Assert to your `mix.exs` dependencies:\n\n```elixir\ndefp deps do\n  [{:power_assert, \"~\u003e 0.2.0\", only: :test}]\nend\n```\n\nand fetch `$ mix deps.get`.\n\n## Usage\n\nReplace `use ExUnit.Case` into `use PowerAssert` in your test code:\n\n```elixir\n## before(ExUnit)\ndefmodule YourAwesomeTest do\n  use ExUnit.Case  # \u003c-- **HERE**\nend\n\n## after(PowerAssert)\ndefmodule YourAwesomeTest do\n  use PowerAssert  # \u003c-- **REPLACED**\nend\n```\n\nDone! You can run `$ mix test`.\n\n### Use with ExUnit.CaseTemplate\n\nInsert `use PowerAssert` with `ExUnit.CaseTemplate.using/2` macro:\n\n```elixir\n## before(ExUnit.CaseTemplate)\ndefmodule YourAwesomeTest do\n  use ExUnit.CaseTemplate\nend\n\n## after(PowerAssert)\ndefmodule YourAwesomeTest do\n  use ExUnit.CaseTemplate\n\n  # add the following\n  using do\n    quote do\n      use PowerAssert\n    end\n  end\nend\n```\n\n### protip: useful command to replace `use ExUnit.Case`\n\n```bash\n$ git grep -l 'use ExUnit\\.Case' | xargs sed -i.bak -e 's/use ExUnit\\.Case/use PowerAssert/g'\n```\n\n## How to use with other framework depending on ExUnit such as ExSpec\n\n### ExSpec\n\nAppend `use PowerAssert` after `use ExSpec`:\n\n```elixir\ndefmodule ExSpecBasedTest do\n  use ExSpec\n  use PowerAssert   # \u003c-- append\n\n  describe \"describe\" do\n    it \"it\" do\n      assert something == \"hoge\"\n    end\n  end\nend\n```\n\nSee also: test/ex_spec/ex_spec_test.exs\n\n\n## API\n\nOnly provide `assert` macro:\n\n```elixir\nassert(expression, message \\\\ nil)\n```\n\n## Dependencies\n\n- ExUnit\n\n## Limitation\n\n- NOT SUPPORTED\n  - match expression ex: `assert List.first(x = [false])`\n  - fn expression ex: `assert fn(x) -\u003e x == 1 end.(2)`\n  - :: expression ex: `\u003c\u003c x :: bitstring \u003e\u003e`\n    - this means string interpolations also unsupported ex: `\"#{x} hoge\"`\n  - sigil expression ex: `~w(hoge fuga)`\n  - quote arguments ex: `assert quote(@opts, do: :hoge)`\n  - case expression\n  - get_and_update_in/2, put_in/2, update_in/2, for/1\n  - \u003c\u003c\u003e\u003e expression includes attributes `\u003c\u003c@x, \"y\"\u003e\u003e; \u003c\u003cx :: binary, \"y\"\u003e\u003e`\n  - `__MODULE__.Foo`\n  - many macros maybe caught error...\n\n## Resources\n\n- [Testing with Power Assert in Elixir projects](http://qiita.com/ma2ge/items/29115d0afbf97a092783)\n- [Power Assert Inside in Elixir](https://speakerdeck.com/ma2gedev/power-assert-inside-in-elixir)\n\n## Author\n\nTakayuki Matsubara (@ma2ge on twitter)\n\n## License\n\nDistributed under the Apache 2 License.\n\nCheck [LICENSE](LICENSE) files for more information.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fma2gedev%2Fpower_assert_ex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fma2gedev%2Fpower_assert_ex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fma2gedev%2Fpower_assert_ex/lists"}