O Mocha tenta encontrar os arquivos de teste test
por padrão, como faço para especificar outro diretório, por exemplo server-test
?
O Mocha tenta encontrar os arquivos de teste test
por padrão, como faço para especificar outro diretório, por exemplo server-test
?
Respostas:
Editar: esta opção está obsoleta: https://mochajs.org/#mochaopts
Se você deseja fazê-lo ainda executando apenas mocha
na linha de comando, mas deseja executar os testes em uma pasta em ./server-tests
vez de ./test
, crie um arquivo ./test/mocha.opts
com exatamente isso no arquivo:
server-tests
Se você deseja executar tudo nessa pasta e subdiretórios, coloque-o em test/mocha.opts
server-tests
--recursive
mocha.opts
são os argumentos transmitidos por meio da linha de comando; portanto, tornar a primeira linha apenas o diretório em que você deseja alterar os testes também redirecionará ./test/
mocha.opts
arquivo pode ser colocado onde você quiser e, em seguida, basta executar mocha
especificando o caminho para o arquivo de configuração, por exemplo:mocha --opts ./mocha.opts
Usa isto:
mocha server-test
Ou se você tiver subdiretórios, use isto:
mocha "server-test/**/*.js"
Observe o uso de aspas duplas. Se você os omitir, talvez não seja possível executar testes em subdiretórios.
mocha test/server-test
mocha ./**/*.test.js
(para que eu possa colocar o arquivo de teste no arquivo do módulo). O padrão parou de funcionar para mim quando adicionei um arquivo de teste em um nível diferente na hierarquia de arquivos que o resto dos testes, e só encontraria esse arquivo de bola ímpar e não as dezenas de outros que viviam no mesmo nível na hierarquia . O embrulho entre aspas o corrigia.
--recursive
como explique abaixo
Aqui está uma maneira, se você tiver subpastas na sua pasta de teste, por exemplo
/test
/test/server-test
/test/other-test
Então, no linux, você pode usar o comando find para listar todos os arquivos * .js recursivamente e passá-lo para o mocha:
mocha $(find test -name '*.js')
--recursive
como explique abaixo
mocha
, não tem opção para definir a estrutura de diretório desejada na configuração?
A boa maneira de fazer isso é adicionar um script npm "test" no package.json que chama mocha com os argumentos corretos. Dessa forma, o seu package.json também descreve sua estrutura de teste. Ele também evita todos esses problemas de plataforma cruzada nas outras respostas (aspas duplas vs simples, "localização" etc.)
Para que o mocha execute todos os arquivos js no diretório "test":
"scripts": {
"start": "node ./bin/www", -- not required for tests, just here for context
"test": "mocha test/**/*.js"
},
Em seguida, para executar apenas os testes de fumaça, chame:
npm test
Você pode padronizar a execução de todos os testes em todos os projetos dessa maneira; assim, quando um novo desenvolvedor iniciar seu projeto ou outro, eles saberão que "npm test" executará os testes. Existe uma boa precedência histórica para isso (Maven, por exemplo, a maioria das escolas antigas também "faz" projetos). Com certeza ajuda o CI quando todos os projetos têm o mesmo comando de teste.
Da mesma forma, você pode ter um subconjunto de testes mais rápidos de "fumaça" que deseja que o mocha execute:
"scripts": {
"test": "mocha test/**/*.js"
"smoketest": "mocha smoketest/**/*.js"
},
Em seguida, para executar apenas os testes de fumaça, chame:
npm smoketest
Outro padrão comum é colocar seus testes no mesmo diretório da origem que eles testam, mas chame os arquivos de teste * .spec.js. Por exemplo: src / foo / foo.js é testado por src / foo / foo.spec.js.
Para executar todos os testes denominados * .spec.js por convenção:
"scripts": {
"test": "mocha **/*.spec.js"
},
Em seguida, para executar todos os testes, chame:
npm test
Veja o padrão aqui? Boa. :) A consistência derrota o mura .
Não use a opção -g ou --grep, esse padrão opera com o nome do teste dentro dele (), não no sistema de arquivos. A documentação atual é enganosa e / ou totalmente errada sobre isso. Para limitar o comando inteiro a uma parte do sistema de arquivos, você pode passar um padrão como o último argumento (não é um sinalizador).
Por exemplo, este comando definirá seu repórter como spec, mas testará apenas os arquivos js imediatamente dentro do diretório server-test:
mocha --reporter spec server-test/*.js
Este comando fará o mesmo que acima, além de executar apenas os casos de teste em que a cadeia de caracteres it () / definição de um teste começa com "Fnord:":
mocha --reporter spec --grep "Fnord:" server-test/*.js
Se no node.js , algumas novas configurações a partir do Mocha v6 :
Opção 1: Criar .mocharc.json
no diretório raiz do projeto:
{
"spec": "path/to/test/files"
}
Opção 2: adicione mocha
propriedade nos projetos package.json
:
{
...
"mocha": {
"spec": "path/to/test/files"
}
}
Mais opções estão aqui .
Execute todos os arquivos test_directory
incluindo os subdiretórios correspondentestest.js
find ./parent_test_directory -name '*test.js' | xargs mocha -R spec
ou use o --recursive
interruptor
mocha --recursive test_directory/
Eu tive esse problema agora e o resolvi removendo a --recursive
opção (que eu havia definido) e usando a mesma estrutura sugerida acima:
mochify "test/unit/**/*.js"
Isso executou todos os testes em todos os diretórios sob /test/unit/
mim e ignorou os outros diretórios dentro de mim./test/
Agora, em um dia (ano 2020), você pode lidar com isso usando o arquivo de configuração mocha :
Etapa 1: Crie o arquivo .mocharc.js no local raiz do seu aplicativo
Etapa 2: adicione o código abaixo no arquivo de configuração do mocha:
'use strict';
module.exports = {
spec: 'src/app/**/*.test.js'
};
Para obter mais opções no arquivo de configuração, consulte este link: https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js
Estou no Windows 7 usando node.js v0.10.0 e mocha v1.8.2 e npm v1.2.14. Eu estava apenas tentando fazer com que o mocha usasse a unidade / teste de caminho para encontrar meus testes. Depois de gastar muito tempo e tentar várias coisas, consegui
O uso da opção "test / unit / *. Js" não funciona no Windows. Por boas razões, o shell do Windows não expande curingas como o unixen.
No entanto, o uso de "teste / unidade" funciona, sem o padrão de arquivo. por exemplo. "mocha test / unit" executa todos os arquivos encontrados na pasta test / unit.
Isso ainda executa apenas os arquivos de uma pasta como testes, mas você pode passar vários nomes de diretório como parâmetros.
Também para executar um único arquivo de teste, você pode especificar o caminho completo e o nome do arquivo. por exemplo. "teste mocha / unit / mytest1.js"
Na verdade, eu configurei no package.json para o npm "scripts": {"test": "mocha test / unit"},
Para que 'npm test' execute meus testes de unidade.
--recursive
opção da seguinte maneira:mocha --recursive "some_dir"
node_modules\.bin\mocha "test\unit\*.js"
funciona no Windows. Também node_modules\.bin\mocha "**\*.js"
funciona (meu caso real). Mas estou procurando uma maneira de excluir o diretório node_modules . (Eu uso gulpfile.js também, mas em algum momento eu preciso para teste de lançamento diretamente com mocha)
Se você estiver usando nodejs
, na sua package.json
sobscripts
global (-g)
instalações: "test": "mocha server-test"
ou "test": "mocha server-test/**/*.js"
para subdocumentosproject
instalações: "test": "node_modules/mocha/bin/mocha server-test"
ou "test": "node_modules/mocha/bin/mocha server-test/**/*.js"
para subdocumentosEm seguida, basta executar seus testes normalmente como npm test
npm run mocha "./test/*.spec.js!(~)"
ignora o argumento da glob, mas node_modules/.bin/mocha "./test/*.spec.js!(~)"
não.
npm run mocha -- yourArgs
Este não parece ser um suporte "fácil" para alterar o diretório de teste.
No entanto, talvez você deva dar uma olhada nesse problema , em relação à sua pergunta.
Como @ jeff-dickey sugeriu, na raiz do seu projeto, crie uma pasta chamada test
. Nessa pasta, crie um arquivo chamado mocha.opts
. Agora, quando tento melhorar a resposta de Jeff, o que funcionou para mim foi, em vez de especificar o nome de apenas uma pasta de teste, especifiquei um padrão para encontrar todos os testes a serem executados no meu projeto, adicionando esta linha:
*/tests/*.js --recursive
no mocha.opts
Se você deseja especificar as pastas exatas para procurar testes, fiz algo assim:
shared/tests/*.js --recursive
server/tests/graph/*.js --recursive
Espero que isso ajude quem precisa mais do que as outras respostas fornecem
.only
e.skip
gerenciar quais testes você Estão correndo. Importante durante o desenvolvimento de um recurso específico, quando você não deseja esperar que todo o conjunto de testes seja executado o tempo todo.