【问题标题】:Testing js alert with Chai Mocha用 Chai Mocha 测试 js alert
【发布时间】:2016-07-18 19:06:37
【问题描述】:

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

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

【问题讨论】:

    标签: javascript mocha.js chai


    【解决方案1】:

    我假设您正在测试的 alert() 是您正在测试的默认 Window.alert 函数。我建议您查看Sinon 库,它允许您为现有函数创建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);
      });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 2015-12-01
      相关资源
      最近更新 更多