Rais e os testes dos assets



As vezes acontece de um deploy falhar. Não é o esperado. Mas acontece. Dia destes, aconteceu comigo, mas por causa dos assets. Mais precisamente um código javascript.

Não é que estava errado ou gerando falhas, mas o código em si não era compatível com o Uglifier, compilador de JS usado por padrão no Rails. O que aconteceu foi que a sintaxe usada funcionava de boa no navegador e em desenvolvimento não dava o erro. Mas em produção dava erro na hora de compilar os assets.

E o pior é que não havia o indicativo de onde dava o erro no stack trace. Rodei, então, a tarefa rake assets:precompile em desenvolvimento e, também não deu erro. Mas o erro estava lá em produção.

Umas googladas depois, descobri que o Uglifier não "entende" algumas especificações mais recentes do Javascript e era sugerido evitar algumas destas sintaxes.

Algo como este código:

function baba(param1: 'value'){
  // some code
}

A expressão param1: 'value' não é válida para o Uglifier. Resolvido isso, o deploy se deu normal, mas depois de mais ou menos meia hora e algum estresse. Para evitar isso, criei um teste para compilar os assets individualmente e depois disso, já me peguei uma vez fazendo código que não iria passar. Coisa bem simples e tem me ajudado:

require "rails_helper"

describe "rake assets:precompile", type: :task do

  context "assets" do
    describe "static precompile" do
      JS_PATH = "app/assets/javascripts/**/*.js";
      Dir[JS_PATH].each do |file_name|

        it "compile #{file_name}" do
          Uglifier.compile(File.read(file_name))
        end

      end
    end
  end

end


Comentários

Postagens mais visitadas deste blog

Bel Duarte Fotografia

Como resolver 99% dos defeitos de mouse sem fio de qualquer fabricante

Faz backup, cópia ou usa Git?