我尝试编写一个测试,如果警报弹出则会通过,如果警报无法弹出则会失败。
我和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方法或其他检查警报的方法?
答案 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);
});
});