【问题标题】:Defining mocha specs on the fly in the browser在浏览器中动态定义 mocha 规格
【发布时间】:2016-02-13 04:35:17
【问题描述】:

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

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

https://plnkr.co/edit/nuZZyD5EsMtpgP66HtW5?p=preview

HTML:

<div id="mocha"></div>
<button id="test">run test</button>

JS:

(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、量角器)都鼓励(强制?)用户在启动跑步者之前定义所有规格。这与我想要实现的目标相反:以编程方式定义规范,而不是在运行时。

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

【问题讨论】:

  • 为什么需要在您的站点中执行测试?
  • 因为这是一个奇怪的古怪边缘情况,根本不推荐使用 webdriver。最终目标是在 chrome 扩展中放置一个“规范运行器”。我只是不想推出自己的测试库。
  • 我不知道你的具体情况,但我真的不鼓励你做这样的事情。尽管如此,我还是发布了一个(我认为)可以解决您的问题的答案。

标签: javascript mocha.js


【解决方案1】:

我认为这会如你所料:

(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();
    }
)

问题是你每次点击按钮时都定义了测试,但你只需要定义一次,而且只在运行器中运行。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多