使用Chai Mocha测试js警报

时间:2016-07-18 19:06:37

标签: javascript mocha chai

我尝试编写一个测试,如果警报弹出则会通过,如果警报无法弹出则会失败。

我和Chai和Sinon一起使用Mocha。

以下是我想测试的功能:

function generateAlert(x){    
    if(x){
        alert('X is true');
     } else { return}    
}

我想做的事情(假的):

describe('AlertView', function (){
    it('should create an alert only when x is true', function(){
        //check if alert is rendering and contains correct string
        chai.assert.alertHappens(generateAlert(True), 'X is true');
        //or at least check if alert happens at all
        chai.assert.alertHappens(generateAlert(True), true);
    }}
)}

我是Mocha Chai的新手,我不确定如何检查是否存在警报或检查警报的内容。我查看了Chai图书馆,但却找不到任何可以做到这一点的东西。是否有我错过的Chai方法或其他检查警报的方法?

1 个答案:

答案 0 :(得分:1)

我认为您正在测试的alert()是您正在测试的默认Window.alert函数。我建议您查看Sinon库,它允许您为现有功能创建Spies。因此,您可以检查函数是否被调用,多少次以及使用什么参数。 我会用间谍覆盖你代码中的alert,然后看到一个正确的参数传递给alert。 这是适用于我的代码:

'use strict';

var chai = require('chai');
var expect = chai.expect;
var sinon = require('sinon');

var alert; // We are going to overwrite default alert() function

function generateAlert(x) {
  if (!x) {
    return;
  }

  alert(x);
}

describe('AlertView', function() {
  beforeEach(function() {
    alert = sinon.spy();
  });

  it('should create an alert only when x is true', function() {
    generateAlert(true);

    expect(alert.calledOnce).to.be.true;
    expect(alert.args[0][0]).to.equal(true);
  });

  it('should create an alert only when x is some string', function() {
    generateAlert('X is true');

    expect(alert.calledOnce).to.be.true;
    expect(alert.args[0][0]).to.equal('X is true');
  });

  it('should not create an alert only when x is false', function() {
    generateAlert();

    expect(alert.callCount).to.equal(0);
  });
});