Node.js 为什么赢了';这些测试不会失败吗?

Node.js 为什么赢了';这些测试不会失败吗?,node.js,electron,bdd,chai,spectron,Node.js,Electron,Bdd,Chai,Spectron,我们使用spectron和WebDrivero对电子应用程序进行了一些简单的“这真的有效吗”测试。我们开始使用的示例代码来自 如中所述,chai as promised测试没有捕捉到不匹配,因此我想我会添加一些额外的测试,以找出为什么chai没有通过测试,而electron应用程序的文本与预期的单元测试文本不匹配 让我们从一些非常简单的事情开始,其余的代码在 第一个单元测试失败,第二个成功 当我们将断言放入函数中时,仍然会检测到失败: it('should fail, but succeeds!

我们使用spectron和WebDrivero对电子应用程序进行了一些简单的“这真的有效吗”测试。我们开始使用的示例代码来自

如中所述,chai as promised测试没有捕捉到不匹配,因此我想我会添加一些额外的测试,以找出为什么chai没有通过测试,而electron应用程序的文本与预期的单元测试文本不匹配

让我们从一些非常简单的事情开始,其余的代码在

第一个单元测试失败,第二个成功

当我们将断言放入函数中时,仍然会检测到失败:

it('should fail, but succeeds!?', function () {
    function fn() {
        var yes = 'yes';
        yes.should.equal('no');
    };
    fn();
});
现在进入electron、WebDrivero和spectron的世界,应用程序标题应该是“Hello world!”,所以这应该失败,但它通过了:

it('tests the page title', function () {
    page.getApplicationTitle().should.eventually.equal("NO WAY");
});
嗯,让我们尝试一个更熟悉的测试:

it('should fail, waitUntilWindowLoaded, yes != no', function () {
    app.client.waitUntilWindowLoaded().getTitle().then(
        function (txt) {
            console.log('txt = ' + txt);
            var yes = 'yes';
            yes.should.equal('no');
        }
    );
});
输出:

    ✓ should fail, waitUntilWindowLoaded, yes != no
txt = Hello World!
它成功了吗?什么?为什么?怎么找到的?

找到了!如果你看

您将看到您需要从每个测试中返回承诺。这是异步chai/mocha测试的典型情况:

it('tests the page title', function () {
    return page.getApplicationTitle().should.eventually.equal("NO WAY");
});

如果您这样做,那么chai测试实际上是正确评估的。

我不认为WebDrivero有错。这看起来像是我在异步摩卡测试中观察到的行为,当我忘记返回承诺时。@Rhayene-正确,我试图通过编辑来澄清。
it('tests the page title', function () {
    return page.getApplicationTitle().should.eventually.equal("NO WAY");
});