javascript - 使用 Chai Mocha 测试 js 警报

标签 javascript mocha.js chai

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

我正在将 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库允许您创建 Spies对于您现有的功能。因此您可以检查函数是否被调用、调用了多少次以及使用了什么参数。 我会用 spy 覆盖代码中的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);
  });
});

关于javascript - 使用 Chai Mocha 测试 js 警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38444212/

相关文章:

unit-testing - 如何使用 Mocha + Sinon 在 Sails.js 中的 Controller 中测试方法?

javascript - 测试一个函数在 promise 解析中被调用

jquery - TypeError jQuery timepicker 不是测试中的函数

javascript - Owl Carousel 数据点特定元素点击发送到第一张幻灯片,但周围的点击发送到适当的幻灯片

javascript - Mocha 因 "timeout exceeded"失败

Javascript HTML 输入数组 PHP

javascript - 尝试 ES6 样式导入给出 'Cannot use import statement outside a module'

javascript - 使用 URL 而不是 JS 文件的 Chai 请求

javascript - 如何使用输入字段将值插入数组?

javascript - Jasmine 测试对象在 Ajax 方法 spy 调用上的状态