僵尸可以测试一个元素不存在吗?

时间:2013-05-23 17:28:13

标签: node.js express mocha zombie.js chai

我正在尝试在快速应用上使用zombie.js(使用mocha)以确保某些元素不会显示在页面上。以下是我尝试这样做的方法:

var app = require('../app).app, // this is express but you don't care
    chai = require('chai'),
    should = chai.should(),
    Browser = require('zombie'),
    browser = new Browser();

describe("page", function() {

    it('should not have a the whatever element', function(done) {
        browser.visit('http://localhost:3000', function() {
            browser.query('#whatever').should.not.exist;
            done();
        });
    });

});

现在,当我运行此测试时,它总是失败:

  • 如果#whatever存在,我明白了:

    expected <div class="whatever">whatever</div> to not exist

  • 如果#whatever不存在,我希望测试通过,但我也会收到错误

    TypeError: Cannot read property 'should' of null

也许这是一个愚蠢的测试,但有没有办法进行这样的测试以使其通过?我在哪里做错了?

THX。

2 个答案:

答案 0 :(得分:7)

如果其他人遇到同样的情况,我找到了解决问题的方法:使用chai expect而不是chai should。

以上代码将以这种方式转换:

var app = require('../app).app, // this is express but you don't care
    chai = require('chai'),
    expect = chai.expect,
    Browser = require('zombie'),
    browser = new Browser();

describe("page", function() {

    it('should not have a the whatever element', function(done) {
        browser.visit('http://localhost:3000', function() {
            expect(browser.query('#whatever')).not.to.exist;
            done();
        });
    });

});

如果#whatever存在,期望断言将失败,否则它将通过。

答案 1 :(得分:3)

zombie.js本机解决方案(版本^4.2.1),无需其他断言库:

browser.assert.elements('#whatever', 0);

它测试是否恰好有0个元素匹配#whatever

documentation