dc0d

dc0d

Problem Using ExCoveralls When There Are Specs In Code

In short, when the specs are removed from lib/excoveralls_spec_lab/kata/user.ex , then the command mix coveralls.html works without a problem and generates the output html file cover/excoveralls.html .

But if there are any specs in lib/excoveralls_spec_lab/kata/user.ex , then the command mix coveralls.html will show this error:

** (exit) an exception was raised:
    ** (MatchError) no match of right hand side value: :error
        cover.erl:1591: :cover.do_compile_beam2/6
        cover.erl:1483: :cover.do_compile_beam/3
        (stdlib) lists.erl:1239: :lists.map/2
        cover.erl:2911: anonymous fn/2 in :cover.pmap_spawn/4
    cover.erl:600: :cover.call/1
    lib/excoveralls.ex:32: ExCoveralls.start/2
    (mix) lib/mix/tasks/test.ex:351: Mix.Tasks.Test.run/1
    (mix) lib/mix/task.ex:331: Mix.Task.run_task/3
    lib/mix/tasks.ex:54: Mix.Tasks.Coveralls.do_run/2
    (mix) lib/mix/task.ex:331: Mix.Task.run_task/3
    (mix) lib/mix/cli.ex:79: Mix.CLI.run_task/2

Elixir and Erlang versions:

erlang 22.0.1
elixir 1.8.2

Sample repository for reproducing the issue can be found here.

An issue is also opened for this.

Marked As Solved

LostKobrakai

LostKobrakai

There is no type ExcoverallsSpecLab.Kata.User.t() like @Eiji said on the github issue. You need to define it. While it is common to use t as type name for the struct a module defines it is just a convention and not defined automatically.

Also Liked

bdubaut

bdubaut

Hi, thanks for this discussion, as it seems I am not the only one with this issue. I’m getting the same type of error in an umbrella project. I have 4 apps in there, things are working fine, but one of the apps crashes.
here’s my circleci job:

version: 2.1
jobs:
  test:
    docker:
      # Codecov uses bash, and bash is not installed on alpine containers.
      - image: elixir:1.9
      - image: circleci/postgres:11
      - image: rabbitmq:3.7-alpine
    environment:
      MIX_ENV: test
    steps:
      - checkout
      - run: mix do local.hex --force, local.rebar --force
      - run: mix do deps.get --only test, deps.compile, compile
      - run: mix do ecto.create --quiet, ecto.migrate
      - run: mix coveralls.json
      - run: bash <(curl -s https://codecov.io/bash)

Coveralls is properly configured (it worked fine before). The only thing that is different is that I’m using the CQRS/ES framework commanded from @slashdotdash . It fails both on CI and locally, pointing again at the issue with the :cover module (however I’m running with erlang 22, not 17 as it’s stated in the github issue linked earlier in the thread).

The error I get is roughly the same as shown before:

==> domain
Cover compiling modules ...
** (exit) an exception was raised:
    ** (MatchError) no match of right hand side value: :error
        cover.erl:1591: :cover.do_compile_beam2/6
        cover.erl:1483: :cover.do_compile_beam/3
        (stdlib) lists.erl:1239: :lists.map/2
        cover.erl:2911: anonymous fn/2 in :cover.pmap_spawn/4
    cover.erl:600: :cover.call/1
    (mix) lib/mix/tasks/test.ex:12: Mix.Tasks.Test.Cover.start/2
    (mix) lib/mix/tasks/test.ex:407: Mix.Tasks.Test.do_run/3
    (mix) lib/mix/task.ex:331: Mix.Task.run_task/3
    (mix) lib/mix/project.ex:352: Mix.Project.in_project/4
    (elixir) lib/file.ex:1542: File.cd!/2
    (mix) lib/mix/task.ex:431: anonymous fn/4 in Mix.Task.recur/1
    (elixir) lib/enum.ex:1948: Enum."-reduce/3-lists^foldl/2-0-"/3
    (mix) lib/mix/task.ex:430: Mix.Task.recur/1
    (mix) lib/mix/project_stack.ex:208: Mix.ProjectStack.recur/1
    lib/mix/tasks.ex:54: Mix.Tasks.Coveralls.do_run/2
    (mix) lib/mix/task.ex:331: Mix.Task.run_task/3
    (mix) lib/mix/cli.ex:79: Mix.CLI.run_task/2
    (elixir) lib/code.ex:813: Code.require_file/2

In order to solve this, I had to remove all typespecs from my commanded app. This brings another question to me:

Where is the problem really coming from?

I can think of a few possiblities:

  • there still is an issue with the :cover erlang module
  • there is an issue with the Mix interoperability with the :cover erlang module
  • my typespecs were bad, although dialyzer was not complaining
  • there is an issue with the excoveralls package

I would love to move this problem forward, but I feel a bit lost now. Does anyone have an idea?

EDIT

I was able to fix the issue by declaring types in the files that were supposed to:

@type t ::%__MODULE__{}

putting this in the modules that required it fixed everything. I think it’s important to note that this was an issue as long as the missing types were used as arguments of the function being specified, things were fine if the return type of a function had not been specified at all in its module.

this is still a mystery to me, but at least I found a way to fix it.

Last Post!

cpwood

cpwood

I encountered the same problem in an umbrella project today, with no obvious change causing it.

I’ve found asking to export coverage fixed / worked-around the problem:

mix test --cover --export-coverage default

as indirectly suggested at mix test.coverage — Mix v1.11.2

Where Next?

Popular in Questions Top

hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a &gt; b) do {:ok, "a"} end if (a &lt; b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
PeterCarter
There are pre-rolled solutions for other frameworks that do work. However, Phoenix does not seem to have these. Have people had good expe...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New

Other popular topics Top

joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
saif
Hello everyone, Long time lurker first time poster here. I’ve recently begun working on Elixir full-time again! :raised_hands: It’s been...
New

We're in Beta

About us Mission Statement