使用 Chai Mocha 测试 js 警报

Testing js alert with Chai Mocha

我正在尝试编写一个测试,如果弹出警报则通过,如果警报未能弹出则失败。

我正在将 Mocha 与 Chai 和 Sinon 一起使用。

这是我要测试的功能:

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 方法或其他检查警报的方法?

我假设您正在测试的 alert() 是您正在测试的默认 Window.alert 函数。我建议您查看 Sinon library which allows you to create Spies 以了解您现有的功能。所以你可以检查函数是否被调用,调用了多少次以及参数是什么。 我会用间谍覆盖您代码中的 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);
  });
});