我在尝试运行所有测试之前尝试播种数据库。所以我创建了一个新文件bootstrapTest.js
并将其包含在我的测试源文件中,如gulp.src(['test/bootstrapTest.js', 'test/**/*.js']
bootstrapTest.js
现在需要重置数据库并重新运行迁移并为数据设定种子。所以我创建了一个子进程,让它运行一个shell脚本(seed.sh
)。
`const exec = require('child_process').exec;
exec('./seed.sh',
{env: {database__host: 'localhost', database__user: 'username',
database__port: 3306, database__password: 'password'}}, function
(error, stdout, stderr) { ...
}`
这就是我seed.sh
的样子
#!/bin/bash
./node_modules/.bin/db-migrate reset --env test
echo '## Database truncated'
./node_modules/.bin/db-migrate up --env test
echo '## Database migrated'
在控制台的输出中,我只看到echo输出而不是运行的命令。我已经验证了db-migrate确实没有运行。
知道为什么db-migrate
没有运行?当我从zsh手动运行时,它可以正常工作。
答案 0 :(得分:0)
找出一种更好的方法来实现相同的结果。我没有在shell脚本中运行这些脚本,而是在我的package.json脚本中添加它们并在开始测试之前运行该脚本。所以我的package.json看起来像这样
"scripts": {
"testdb": "db-migrate reset --env test && db-migrate up --env test",
"test": "npm run testdb && ./node_modules/.bin/gulp"
}
答案 1 :(得分:0)
假设您正在使用npm start
运行节点。
一个人可以使用npm hooks
进行数据库迁移。
"scripts" : {
"prestart":"db-migrate reset --env test && db-migrate up --env test",
"start" : "node server.js",
"poststart" :"echo 'do after server run'"
},
简而言之,
$。 npm start //在终端上触发命令
//output
npm预安装 //首先运行
npm start //现在开始
执行此操作npm start
之前,先执行prestart
脚本,然后执行start
脚本。