我能够让您的示例正常工作,并且您在这里的工作正常。我确实做了一些修改,但我得到了相同的结果。您正在使用的是连接,它生成一个本地网络服务器,然后测试在浏览器中运行。所以,你的任务没有挂起,它只是运行服务器。
但是从听起来的情况来看,您可能希望您的测试在终端中运行?如果是这样,我有一个相当不错的解决方案给你:
包.json
{
"name": "Jasmine Tests",
"description": "Jasmine Testing",
"version": "0.0.1",
"devDependencies": {
"grunt": "0.4.x",
"grunt-contrib-watch": "~0.2.0",
"grunt-contrib-jshint": "~0.4.3",
"grunt-contrib-jasmine": "~0.4.2",
"phantomjs": "1.8.2-0",
}
}
Gruntfile.js
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON("package.json"),
watch: {
grunt: {
files: ["Gruntfile.js", "package.json"],
tasks: "default"
},
javascript: {
files: ["src/client/**/*.js", "specs/**/*Spec.js"],
tasks: "test"
}
},
jasmine: {
src: "src/client/js/*.js",
options: {
specs: "specs/client/*Spec.js"
}
},
jshint: {
all: [
"Gruntfile.js",
"src/**/*.js",
"spec/**/*.js"
],
options: {
jshintrc: ".jshintrc"
}
}
});
grunt.loadNpmTasks("grunt-contrib-watch");
grunt.loadNpmTasks("grunt-contrib-jshint");
grunt.loadNpmTasks("grunt-contrib-jasmine");
grunt.registerTask("test", ["jshint", "jasmine"]);
grunt.registerTask("default", ["test"]);
};
您可以将文件结构更改为适合您的任何内容。设置这两个文件都运行以下命令:
npm install
和
grunt test
或者
grunt watch
现在我确实添加了一些东西,比如 jshint,并且 watch...watch 是可选的,但是拥有它真的很棒。我认为 jshint 是必须的,但请随时将其从解决方案中删除。
真正的关键是phantomjs,它使您能够在“幻像”浏览器中运行这些测试,并输出到终端。
您还需要根据自己的喜好自定义目录。
我对此发表了一篇很好的博客文章(我也进行了服务器端测试)。
编辑:如果你选择走那条路,你还需要一个.jshintrc文件。
.jshintrc
{
"curly" : true,
"eqeqeq" : true,
"immed" : true,
"latedef" : true,
"newcap" : true,
"noarg" : true,
"sub" : true,
"undef" : true,
"boss" : true,
"eqnull" : true,
"node" : true,
"es5" : true,
"globals" : {
"it" : false,
"xit" : false,
"describe" : false,
"xdescribe" : false,
"beforeEach" : false,
"afterEach" : false,
"expect" : false,
"spyOn" : false
}
}
希望这可以帮助。