2015-05-20 42 views
1

为什么这个测试不通过?如何测试触发事件?

beforeEach(function(){ 
    loadFixtures('addvehicle.html'); 
}); 

it ("should trigger change event on #selectLanguage", function(){ 
    spyOnEvent('#selectLanguage', 'change'); 
    $('#selectLanguage').trigger('change'); 
    expect('change').toHaveBeenTriggeredOn('#selectLanguage'); 
}); 

我的夹具文件看起来像这样:

<div id="selectTypeWrapper"></div> 
<select id="selectLanguage"></select> 

我得到这个错误:

Error: Expected event [object Object] to have been triggered on #selectLanguage

难道我之前设置的改变监听器? (?怎么会变成这样的工作)

+0

请从'addvehicle.html'发布您的html – marcel

+0

有两种方法可以设置更改侦听器:1.您可以尝试向'#selectLanguage' html标签添加'onChange =“function(){} 。 2.添加'$('#selectLanguage).on('change',function(){});'作为'beforeEach'中的第二行。 – marcel

+0

addvehicle.html是两行'

' – Garrarufa

回答

1

我不知道为什么你的代码不能正常工作,但也许你可以试试这个:

var changeSpy; 

beforeEach(function(){ 
    loadFixtures('addvehicle.html'); 
    changeSpy = jasmine.createSpy('handleChange() spy'); 
    $('#selectLanguage').change(changeSpy); 
}); 

it ("should trigger change event on #selectLanguage", function(){ 
    $('#selectLanguage').change(); 
    expect(changeSpy).toBeDefined(); 
    expect(changeSpy).toHaveBeenCalled(); 
}); 

这将间接地测试事件。

+0

感谢您的建议。不幸的是,我为我的论文编写这段代码,我必须使用原始语法... – Garrarufa

+0

你的意思是什么“原始语法”? – marcel

+0

我必须使用例如.toHaveBeenTriggered()和其他东西从茉莉 - jquery – Garrarufa