目前,我正在运行python manage.py test
中每过一段时间后,我做我的Django项目显著的变化。 是否有可能自动运行这些测试时,我改变,将文件保存在我的项目? 这将是更早发现错误有用的(我知道Rails已经像这样使用RSpec)。 我用鼻子和Django的鼻子。 提前致谢。
Answer 1:
使用ENTR :
$ find . -name '*.py' | entr python ./manage.py test
或者,对于额外的信用,有结合它的ACK :
$ ack --python | entr python ./manage.py test
如果你想让它甚至找到新的文件,如你添加它们:
$ until ack -f --python | entr -d python ./manage.py test; do sleep 1; done
Answer 2:
py.test答案(这也适用于鼻):
pip install pytest-xdist
py.test -f # will watch all subfolders for changes, and rerun the tests
由于py.test了解鼻子,这个工程的鼻子太大。
Answer 3:
我是一名JavaScript开发人员,所以我使用的工具JS开发与Node.js的建成,实现我的项目同样的目标。 这是非常简单的,但你还需要安装到的NodeJS搞不定。
我创建了一个叫做在我的项目的根目录gruntfile.js文件:
//gruntfile.js
module.exports = function(grunt) {
grunt.initConfig({
watch: {
files: ['*.py'],
tasks: ['shell']
},
shell: {
test: {
command: 'python main_test.py'
}
}
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-shell');
grunt.registerTask('default', ['watch']);
};
它在做什么基本上是看在具有PY扩展目录中的任何文件,如果他们改变了它执行shell命令,在这种情况下我的Python测试(你可能想改变它,我测试的名字是main_test.py)。 为了运行需要安装Node.js的这一咕噜脚本之后,你将有NPM在全局路径。 之后,你需要英索尔几个节点模块为好。 所有这些模块除了咕噜-CLI将存储在当前文件夹,以便确保你在你的项目的根目录或什么都夹你把gruntfile.js中,然后运行命令休耕。
npm install grunt-cli -g
npm install grunt
npm install grunt-contrib-watch
npm install grunt-shell
不要担心大小,这些都是非常小的模块。 现在,你有每一件事情的设置,你可以简单地运行grunt
,它会开始看你的py文件,当您保存他们将运行测试。 它可能不是用于运行测试的Python最好的方式,但正如我说,我是一个JavaScript开发人员,我觉得步兵提供执行测试,甚至对其他语言的,所以我用它的一个非常简单的方法。
Answer 4:
我只是想nose-watch
和它的工作太棒了! 安装插件和运行与测试--with-watch
的选择。
更新 ::(它似乎并没有从运行Django的鼻子的manage.py帮手测试时很好地工作。
最后,我选择使用tdaemon ,支持Django的,虽然可能需要一点摆弄以及为完全成熟的项目。
例如,下面是我跑了我的Django项目:
tdaemon -t django --custom-args=a_specific_app_to_test -d --ignore-dirs logs
该--custom-args
是集中测试,以特定的应用程序(一样的,你会做python manage.py test a_specific_app_to_test
该-d
参数是启用调试日志记录,打印的文件变化触发运行。
本--ignore-dirs
是必要的,因为我的测试写日志(这本身就是一个问题!)和tdaemon
进入一个无限循环。
Answer 5:
这里另一个JavaScript开发,我发现nodemon
( https://github.com/remy/nodemon )工作得很好。 默认情况下,手表*.js
的文件,但是这是可配置的--ext
标志。 要使用它,这样做:
npm install -g nodemon
cd /your/project/dir/
nodemon --ext py --exec "python manage.py test"
现在,每当一个*.py
文件的变化,它会重新运行命令。 它甚至还发现了新的文件。
Answer 6:
我习惯watchr,像Watchr
Answer 7:
我这样做是使用一饮而尽。 安装一饮而尽壳:
npm install gulp-shell --save-dev
而在gulpfile.js:
var shell = require('gulp-shell')
gulp.task('run-tests', shell.task([
'python3 manage.py test']))
gulp.task('watch', function(){
gulp.watch(['./your-project-name/**/*.html', './your-project-name/**/*.py'], ['run-tests']);
});
gulp.task('default',['run-tests','watch']);
它运行测试随时有保存到任何的.py或.html文件的变化!
Answer 8:
您可以使用Django的主管 Django上的顶部。 这将避免使用CI工具(其可以在任何情况下是有用的,这不是无效的其他响应 - 也许只是互补)。
Answer 9:
我建议设立Django的鼻子和嗅探器 。 这是很容易设置和伟大工程。 沿着线的东西这scent.py是我唯一需要的定制。 然后,你可以运行sniffer -x myapp.tests
。
鼻附带了一些其他东西,使测试位更好的工作,并具也。
Answer 10:
如果你使用git控制代码,另一种方式是使用git的钩预先承诺
也许错误,如remote: fatal: Not a git repository: '.'
检查这个帖子https://stackoverflow.com/a/4100577/7007942
Answer 11:
我写了一个咕嘟咕嘟任务自动运行./manage.py test
,只要任何指定的Python文件被更改或删除。 你需要的节点此。
首先,安装咕嘟咕嘟:
yarn add -D gulp@next
然后使用以下gulpfile.js
并进行必要的调整:
const { exec } = require('child_process');
const gulp = require('gulp');
const runDjangoTests = (done) => {
const task = exec('./manage.py test --keepdb', {
shell: '/bin/bash', // Accept SIGTERM signal. Doesn't work with /bin/sh
});
task.stdout.pipe(process.stdout);
task.stderr.pipe(process.stderr);
task.on('exit', () => {
done();
});
return task;
};
gulp.task('test', runDjangoTests);
gulp.task('watch', (done) => {
let activeTask;
const watcher = gulp.watch('**/*.py', {
// Ignore whatever directories you need to
ignored: ['.venv/*', 'node_modules'],
});
const runTask = (message) => {
if (activeTask) {
activeTask.kill();
console.log('\n');
}
console.log(message);
activeTask = runDjangoTests(done);
};
watcher.on('change', (path) => {
runTask(`File ${path} was changed. Running tests:`);
});
watcher.on('unlink', (path) => {
runTask(`File ${path} was removed. Running tests:`);
});
});
然后只需运行node node_modules/gulp/bin/gulp.js watch
运行任务:)
Answer 12:
你需要一个持续集成服务器,像詹金斯 。