Eu uso o Mocha para testar minhas coisas de JavaScript. Meu arquivo de teste contém 5 testes. É possível executar um teste específico (ou conjunto de testes) em vez de todos os testes no arquivo?
Eu uso o Mocha para testar minhas coisas de JavaScript. Meu arquivo de teste contém 5 testes. É possível executar um teste específico (ou conjunto de testes) em vez de todos os testes no arquivo?
Respostas:
Tente usar a --grep
opção do mocha :
-g, --grep <pattern> only run tests matching <pattern>
Você pode usar qualquer regex JavaScript válido como <pattern>
. Por exemplo, se tivermos test/mytest.js
:
it('logs a', function(done) {
console.log('a');
done();
});
it('logs b', function(done) {
console.log('b');
done();
});
Então:
$ mocha -g 'logs a'
Para executar um único teste. Observe que isso aparece entre os nomes de todos describe(name, fn)
e it(name, fn)
invocações.
Considere o uso de describe()
chamadas aninhadas para namespacing para facilitar a localização e a seleção de conjuntos específicos.
mocha some/test.js
) não funcionou. obrigado!
logs a bcd
que contém a logs a
substring? Regexp ^$
não está funcionando no 0.10.2.
Dependendo do seu padrão de uso, você pode gostar de usar apenas . Nós usamos o estilo TDD; Se parece com isso:
test.only('Date part of valid Partition Key', function (done) {
//...
}
Somente este teste será executado em todos os arquivos / suítes.
it.only
.
it.only
não vai trabalhar em conjunto com given
de mocha-testdata . E é fácil esquecer de removê-lo mais tarde.
eslint-plugin-mocha
tem uma regra no-exclusive-tests
que o pegará se você esquecer de removê-lo .only
.
Se você estiver usando npm test
(usando scripts package.json), use um extra --
para passar o parâmetro para o mocha
por exemplo npm test -- --grep "my second test"
EDIT : Parece que --grep
pode ser um pouco exigente (provavelmente dependendo dos outros argumentos). Você pode:
Modifique o package.json:
"test:mocha": "mocha --grep \"<DealsList />\" .",
Ou então use o --bail
que parece ser menos exigente
npm test -- --bail
--grep
pode ser um pouco exigente - tente colocá-lo logo após o mocha na entrada de script npm. Outra coisa npm test -- --bail
é útil para salvamento após o primeiro teste que falha
--grep
salvar meu dia! Muito obrigado. PS. Eu estou no Windows, rodandonpm test -- --grep @tag
Na verdade, também é possível executar um único teste de mocha por nome de arquivo (não apenas por „it () - string-grepping“) se você remover o padrão glob (por exemplo ./test/**/*.spec.js
) do seu mocha.opts, criar uma cópia, respectivamente:
node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js
Aqui está o meu mocha.single.opts (só é diferente em perder a linha glob acima mencionada)
--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive
Antecedentes: Embora você possa substituir as várias opções do arquivo opts (começando com --
), você não pode substituir a glob . Esse link também tem algumas explicações.
Dica: se node_modules/.bin/mocha
confunde você, use o pacote local mocha. Você também pode escrever apenas mocha
se estiver instalado globalmente.
E se você deseja o conforto de package.json
: Ainda: remova o **/*
globo -ish do seu mocha.opts
, insira-o aqui, para todos os testes, deixe-os fora para o único teste:
"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha $1",
"test-single-watch": "mocha -R list -w $1",
uso:
> npm run test
respectivamente
> npm run test-single -- test/ES6.self-test.spec.js
(cuidado com o --
!)
Warning: Could not find any test files matching pattern: $1
Oi soluções acima não funcionou para mim. A outra maneira de executar um único teste é
mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'
Isso ajuda a executar um caso de teste a partir de um único arquivo e com nome específico.
-g
e você não precisará especificar um nome de arquivo. Se você não pode escrever uma expressão que seja seletiva o suficiente, isso significa que você não está nomeando seus testes corretamente.
npm test <filepath>
por exemplo :
npm test test/api/controllers/test.js
aqui 'test / api / controllers / test.js' é o caminho do arquivo.
Você pode tentar "it.only"
it.only('Test one ', () => {
expect(x).to.equal(y);
});
it('Test two ', () => {
expect(x).to.equal(y);
});
neste o primeiro só irá executar
--forbid-only
no servidor de CI / build. .only
tem uma tendência a se infiltrar na ramificação principal e tornar os outros testes mudos, pois eles simplesmente não serão mais executados. Cheguei a pensar no fluxo de trabalho de alteração de código para executar testes diferentes de um anti-recurso. O executor de teste deve determinar quais testes devem ser executados (também conhecidos como testes marcados) e não o desenvolvedor.
it.only
a repo #
Olhando para https://mochajs.org/#usage , vemos que basta usar
teste de mocha / myfile
vai funcionar. Você pode omitir os '.js' no final.
--grep
apenas filtrava as@
tags.