我正在尝试编写一个测试,如果弹出警报,该测试将通过;如果警报弹出失败,该测试将失败。
我正在将 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/