我有一个如下所示的茉莉花咖啡因测试。我正在尝试模拟li.active事件并在javascript中测试它。以下是测试规范。
describe 'Interviews', ->
describe 'TTI.questionAdd', ->
it 'should close modal when choose a question is empty', ->
spyOn(TTI.Position, 'questionCancel')
htmlMock = '<form action="javascript:void();>"'
htmlMock += '<ul id="#question-create-methods">'
htmlMock += '<li class="active"><a href="#">Choose a Question</a></li>'
htmlMock += '</ul>'
htmlMock += '<input class="btn-question-add" type="submit">'
htmlMock += '</form>'
$(htmlMock).appendTo('body')
$('.btn-question-add').on('click', TTI.Position.questionAdd)
console.log(document.getElementsByTagName('body')[0].innerHTML)
$(".btn-question-add").trigger('click')
...
这是我真正的coffeescript文件片段
TTI.Position.questionAdd = (e) ->
e.preventDefault()
t = $(this)
id = t.attr 'id'
tab = $('.nav-tab.active').data('type')
type = 'vod'
duration = parseInt($('.js-duration-mins').val()) * 60 + parseInt($('.js-duration-secs').val())
switch $('#question-create-methods').find('li.active a').html()
when 'Choose a Question'
body = $('#library_questions').find('a.active').html()
when 'Write a Question'
body = $('#question_write_body').val()
when 'Custom Question Bank'
question_bank_id = $('#question-custom').find('a.active').data('id')
body = $('#question-custom').find('a.active').html()
...
但是当我打印出$('#question-create-methods')。从实际的javascript中找到('li.active a')。html()到控制台时,它总是未定义!!这让我疯了,因为它阻止我通过模拟'li.active a'元素来正确测试它。我究竟做错了什么?可能是在加载dom之前javascript正在执行,所以我如何确保不是这种情况。