fdescribe()
和fit()
非常适合在您处理测试子集时降低噪音。在将我的分支合并为主分支之前,我有时会忘记将它们更改回describe()
/ it()
。 (在处理代码时将它们放在单独的分支中是可以的 - 即预先提交检查对我不起作用。)
我的CI环境是Codeship。如果遇到任何有针对性的方法,是否有解决这个问题的解决方案会导致Codeship中的测试失败?
使用像no-focused-tests这样的东西就行了。知道如何在Codeship中将此规则作为错误启用并在本地禁用它吗?
答案 0 :(得分:3)
使用无焦点测试之类的东西是可以的。知道如何在Codeship中将此规则作为错误启用并在本地禁用它吗?
您可以使用环境变量的组合并重新定义fdescribe / fit全局函数:
npm i --save cross-env
的package.json:
"scripts": {
"test": "jasmine",
"test-safe": "cross-env FOCUSED_TESTS=off jasmine"
},
disableFocusedTestsIfNecessary.js(在 jasmine定义其全局变量后包含):
if (process.env.FOCUSED_TESTS === "off") {
console.log("Focused tests must be off");
global.fdescribe = global.fit = function() {
throw new Error("fdescribe and fit are disabled in this environment");
};
}
else {
console.log("Focused tests enabled");
}
告诉代码运行npm run test-safe
代替npm run test
答案 1 :(得分:2)
对于那些感兴趣的人,如果你使用的是jasmine和eslint,你可以使用这个插件来确保没有重点测试:https://github.com/tlvince/eslint-plugin-jasmine。
npm install -g eslint
。 npm install --save-dev eslint-plugin-jasmine
。创建一个.eslintrc
文件,如下所示:
{
"rules": {
"semi": 2
},
"plugins": ["jasmine"],
"env": {
"jasmine": true
},
"extends": "plugin:jasmine/recommended",
}
然后您就可以运行linter eslint -c ./.eslintrc app.js
答案 2 :(得分:2)
如果您使用的是TSLint,并且(和我一样)发现所有散焦和tslint-jasmine-noSkipOrFocus检查器都不适合您,我为此创建了一个Gist:https://gist.github.com/djungowski/7d9126bb79970446b4ffeb5656c6bf1f
使用方法:
TSLint/Rules
的文件夹noJasmineFocusRule.js
中rulesDirectory: 'TSLint/Rules'
"no-jasmine-focus": true
启用选项答案 3 :(得分:0)
这不是最佳解决方案。但这可以满足我的需求。
要设置:
public static ulong GetWhitelisted(string key)
{
if (whitelisted.ContainsKey(MinecraftClient.ChatBots.WeeWoo.username))
{
ulong userWhiteListId;
if (UInt64.TryParse(key, out userWhiteListId))
{
// If parsing succeeded, return the value
return userWhiteListId;
}
// Optionally, return some other value if the user was found but parsing failed
// return -1;
}
// Either the user wasn't found or the parsing failed
return 0;
}
我从吞吃任务中称其为
npm i lodash
npm i minimist
throwIfFocusedTest.js:
node .\\build\\throwIfFocusedTest.js e2e/
node .\\build\\throwIfFocusedTest.js src/
walkSync.js:
const walkSync = require('./walkSync').default;
const _ = require('lodash');
const argv = require('minimist')(process.argv);
const fs = require('fs');
if (argv._.length !== 3) {
throw 'expecting 1 command line argument';
}
const directory = argv._[2];
const files = walkSync(directory);
const scriptFiles = _.filter(files, f => f.endsWith('.js') || f.endsWith('.ts'));
const invalidStrings = [
'fdescribe',
'fit',
];
_.each(scriptFiles, fileName => {
const contents = fs.readFileSync(fileName, 'utf8');
invalidStrings.forEach(is => {
if (contents.includes(is)) {
console.error(`throwIfFocusedTest: ${directory}: File contains ${is}: ${fileName}`);
process.exit(1);
}
});
});
console.log(`throwIfFocusedTest: ${directory}: No files contain: ${invalidStrings.join(', ')}`);
答案 4 :(得分:0)
我迟到了。
我的作品也有类似的问题。我们不使用ts / eslint,所以我只是编写了一个快速脚本来引发将使我的dockerfile / build失败的错误。
在这里。
#!/bin/sh
files=$(find "./.." -type f -name '*.spec*')
errored=false
echo "Checking for focused tests"
for file in $files
do
if grep -E "fdescribe|fit" $file; [ $? -eq 0 ]; then
echo "-Focusing a test in the file $file"
errored=true
fi
done
if $errored; then
echo "Some tests were focused"
exit 1
else
echo "No tests were focused"
fi
答案 5 :(得分:0)
如果您愿意在将测试标记为焦点或跳过(fit
+ xit
)时失败,那么有一个相对较新的Karma功能可以解决该问题没有插件。 Karma现在支持failOnSkippedTests
配置文件/ CLI选项,根据the docs,它会导致“故意禁用的测试失败,例如fit()或xit()”。