Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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 在浏览器中动态定义摩卡规格_Javascript_Mocha.js - Fatal编程技术网

Javascript 在浏览器中动态定义摩卡规格

Javascript 在浏览器中动态定义摩卡规格,javascript,mocha.js,Javascript,Mocha.js,我需要能够在浏览器中执行mocha测试。不使用cli工具通过终端在浏览器中运行测试。从字面上说,浏览器中的所有内容。目标是在用户单击按钮后运行规范 我已经在浏览器中正确地设置了mocha,但是有一些缓存行为让我感到困惑 HTML: <div id="mocha"></div> <button id="test">run test</button> (function(init, $, runner) { init(); $('#

我需要能够在浏览器中执行mocha测试。不使用cli工具通过终端在浏览器中运行测试。从字面上说,浏览器中的所有内容。目标是在用户单击按钮后运行规范

我已经在浏览器中正确地设置了mocha,但是有一些缓存行为让我感到困惑

HTML:

<div id="mocha"></div>
<button id="test">run test</button>
(function(init, $, runner) {
    init();
    $('#test').addEventListener('click', runner)
})(
    function init() {
        mocha.setup('bdd');
    },
    function $(sel) {
        return document.querySelector(sel);
    },
    function specRunner(e) {
        describe('test at ' + new Date().getTime(), function() {
            it('should add 1 + 1', function() {
                chai.assert(1 + 1 === 2, 'added 1 + 1');
            });
        });
        mocha.run();
    }
)
我使用过的其他测试工具(qunit、jasmine、karma、Digrator)都鼓励(force?)用户在跑步者开始之前定义他们的所有规格。这与我试图实现的相反:以编程方式定义规范,而不是在运行时


在plnkr中,似乎摩卡正在缓存以前的规范,然后在每次单击时运行所有规范。我怎样才能避免这种行为?

我认为这是你所期望的:

(function(init, $, runner) {
    init();
    $('#test').addEventListener('click', runner)
})(
    function init() {
        mocha.setup('bdd');
        describe('test at ' + new Date().getTime(), function() {
            it('should add 1 + 1', function() {
                chai.assert(1 + 1 === 2, 'added 1 + 1');
            });
        });
    },
    function $(sel) {
        return document.querySelector(sel);
    },
    function specRunner(e) {
        mocha.run();
    }
)
问题是每次单击按钮时都定义了测试,但只需要定义一次,并且只在运行程序中运行


希望这对你有所帮助

我想这是你所期待的:

(function(init, $, runner) {
    init();
    $('#test').addEventListener('click', runner)
})(
    function init() {
        mocha.setup('bdd');
        describe('test at ' + new Date().getTime(), function() {
            it('should add 1 + 1', function() {
                chai.assert(1 + 1 === 2, 'added 1 + 1');
            });
        });
    },
    function $(sel) {
        return document.querySelector(sel);
    },
    function specRunner(e) {
        mocha.run();
    }
)
问题是每次单击按钮时都定义了测试,但只需要定义一次,并且只在运行程序中运行


希望这对您有所帮助

为什么您需要在您的站点中执行测试?因为这是一个奇怪的古怪边缘案例,根本不喜欢使用webdriver。最终目标是在chrome扩展中添加一个“spec runner”。我只是不想推出我自己的测试库。我不知道你的确切情况,但我真的不想让你做这样的事情。尽管如此,我还是发布了一个答案(我认为)解决了你的问题。为什么你需要在你的网站上执行测试?因为这是一个奇怪的边缘案例,使用webdriver根本不是首选。最终目标是在chrome扩展中添加一个“spec runner”。我只是不想推出我自己的测试库。我不知道你的确切情况,但我真的不想让你做这样的事情。尽管如此,我还是发布了一个答案(我认为)解决了你的问题。