Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 引用错误:can';在yeoman中使用grunt测试时找不到变量x_Javascript_Unit Testing_Gruntjs_Mocha.js_Yeoman - Fatal编程技术网

Javascript 引用错误:can';在yeoman中使用grunt测试时找不到变量x

Javascript 引用错误:can';在yeoman中使用grunt测试时找不到变量x,javascript,unit-testing,gruntjs,mocha.js,yeoman,Javascript,Unit Testing,Gruntjs,Mocha.js,Yeoman,我用的是约曼咖啡、格伦特咖啡和摩卡咖啡。我想做BDD,所以我做了基本单元测试,并在控制台中运行grunt test,这给了我ReferenceError:找不到变量:bioture在浏览器中打开test/index.html,一切正常 这是应用程序/脚本中的my bioture.js文件: 'use strict'; var Creature = (function () { function Creature(name) { this.name = name;

我用的是约曼咖啡、格伦特咖啡和摩卡咖啡。我想做BDD,所以我做了基本单元测试,并在控制台中运行
grunt test
,这给了我
ReferenceError:找不到变量:bioture
在浏览器中打开test/index.html,一切正常

这是应用程序/脚本中的my bioture.js文件:

'use strict';
var Creature = (function () {
    function Creature(name) {
        this.name = name;
    }
    Creature.prototype.sayHello = function (message) {
        return this.name + ' ' + message;
    };
    Creature.prototype.eat = function (item){
        return this.name + ' is eating ' + item;
    }
    return Creature;
})();
这是我的test/index.html

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Mocha Spec Runner</title>
    <link rel="stylesheet" href="bower_components/mocha/mocha.css">
</head>
<body>
    <div id="mocha"></div>
    <script src="bower_components/mocha/mocha.js"></script>
    <script>mocha.setup('bdd')</script>
    <script src="bower_components/chai/chai.js"></script>
    <script>
        var assert = chai.assert;
        var expect = chai.expect;
        var should = chai.should();
    </script>

    <!-- include source files here... -->
    <script src="../app/scripts/creature.js"></script>
    <!-- include spec files here... -->
    <script src="spec/test.js"></script>

    <script>mocha.run()</script>
</body>
</html>
但是,当运行
grunt test
时,它现在可以工作了,但是打开test/index.html文件时,它现在会给出一个错误
ReferenceError:firebug控制台中没有定义生物

我是做错了什么,还是这是不正确的行为?我能做些什么使它双向运行?

通过将gruntfile.js changed test:options:open更改为true,我发现了问题所在

// The actual grunt server settings


connect: {
        options: {
            port: 9000,
            open: true,
            livereload: 35729,
            // Change this to '0.0.0.0' to access the server from outside
            hostname: 'localhost'
        },
        livereload: {
            options: {
                ...
            }
        },
        test: {
            options: {
                open: false,
                port: 9001,
                middleware: function(connect) {
                    return [
                        connect.static('.tmp'),
                        connect.static('test'),
                        connect().use('/bower_components', connect.static('./bower_components')),
                        connect.static(config.app)
                    ];
                }
            }
        },
        dist: {
            ...
            }
        }
    }
提前谢谢

可能与您的电话有关

<script>mocha.run()</script>
也许你会打电话

<script>mocha.run()</script>
你试过推杆吗

<script src="../app/scripts/creature.js"></script>

以前

<script src="bower_components/mocha/mocha.js"></script>

看起来var还没有定义,很可能volkinc的回答是什么。

你试过把

<script src="../app/scripts/creature.js"></script>

以前

<script src="bower_components/mocha/mocha.js"></script>



看起来var没有定义,很可能volkinc的回答是什么。

这可能是因为这一行。connect.static(config.app)。在命令行上运行它,它运行connect,并将根/基路径(读取文件的位置)设置为app和test。因此,如果您删除应用程序,它适用于命令行,但是如果您将其作为文件运行,它是相对的,因此需要“app”

这可能是因为这一行。connect.static(config.app)。在命令行上运行它,它运行connect,并将根/基路径(读取文件的位置)设置为app和test。因此,如果您删除应用程序,它适用于命令行,但是如果您将其作为文件运行,它是相对的,因此需要“app”

否,如果我将其更改为此,它将在浏览器中中断测试(显示白页),并且在控制台中仍然给出引用错误。如果没有if document.readyState,它将触发并在浏览器中以正确的名称显示警报。控制台不断给出相同的错误。您在没有document.readyState的情况下被告知,document.readyState发生了什么情况?document.readyState不工作。如果(document.readyState==“complete”)
中放入的任何内容都不会触发。我明白了。但你们的问题是,当你们调用这个生物对象的时候,它并没有被加载。如果您使用jquery,请尝试$(function(){var bioture=new bioture('test');alert(bioture.name);//mocha.run()});不,如果我将其更改为此,它将中断浏览器中的测试(显示白色页面),并且仍然在控制台中给出引用错误。如果没有if document.readyState,它将激发并在浏览器中显示具有正确名称的警报。控制台不断给出相同的错误。您在没有document.readyState的情况下被告知,document.readyState发生了什么情况?document.readyState不工作。如果(document.readyState==“complete”)中放入的任何内容都不会触发。我明白了。但你们的问题是,当你们调用这个生物对象的时候,它并没有被加载。如果您使用jquery,请尝试$(function(){var bioture=new bioture('test');alert(bioture.name);//mocha.run()});谢谢你的帮助。当我把我的create.js放进身体的第一件事。我的浏览器测试仍然可以工作,但是控制台测试通过了,没有测试:
0通过(1ms)>>0通过!(0.00s)完成,没有错误。
您是否尝试过从bioture.js中删除'var bioture='呢?在刚刚尝试了您的修复(无效)后,我发现这与我在gruntfile.js中连接到测试服务器有关,当直接打开html文件时,所有链接都是正确的,但是当通过
grunt test
打开它时,它与bioture.js的链接错误,我认为是因为它打开了错误的页面进行测试。我将在一个bitI更新的原始帖子中发布一个更新,您能告诉我如何使其双向运行,或者如果不能直接打开test/index.html是正确的行为吗?您是否尝试过将端口设置为0或“?”,以便服务器在该端口不可用时选择一个端口?将主机名设置为“*”以使其在任何地方都可用。感谢您的帮助。当我把我的create.js放进身体的第一件事。我的浏览器测试仍然可以工作,但是控制台测试通过了,没有测试:
0通过(1ms)>>0通过!(0.00s)完成,没有错误。
您是否尝试过从bioture.js中删除'var bioture='呢?在刚刚尝试了您的修复(无效)后,我发现这与我在gruntfile.js中连接到测试服务器有关,当直接打开html文件时,所有链接都是正确的,但是当通过
grunt test
打开它时,它与bioture.js的链接错误,我认为是因为它打开了错误的页面进行测试。我将在一个bitI更新的原始帖子中发布一个更新,您能告诉我如何使其双向运行,或者如果不能直接打开test/index.html是正确的行为吗?您是否尝试过将端口设置为0或“?”,以便服务器在该端口不可用时选择一个端口?将主机名设置为“*”以使其在任何地方都可用。那么,您有什么建议作为解决方案?在
connect.static(config.app)
中进行更改会使testrunner以0次通过(因此它不会运行实际的测试)。我不明白为什么它不能同时运行控制台运行程序和实际页面,而不必每次对其中一个或另一个进行更改。那么,您有什么建议作为解决方案?在
connect.static(config.app)
中进行更改会使testrunner以0次通过(因此它不会运行实际的测试)。我不明白为什么它不能同时运行控制台运行程序和实际页面,而不必每次对其中一个进行更改。
<script src="../app/scripts/creature.js"></script>
<script src="bower_components/mocha/mocha.js"></script>