Problem polega na buforowaniu obiektów jQuery w kontekście globalnym w czasie wykonywania. Oto dwa fragmenty z kodu (od ogniwo zapytanie: http://jsfiddle.net/adardesign/aZRK7/12/):
HTML:
<div id="qunit-fixture">
<span id="ele1" class="action" data-action="action1"></span>
<span id="ele2" class="action" data-action="action2" ></span>
</div>
JS:
// caching elements
var $ele1 = $('#ele1'),
$ele2 = $('#ele2');
test('action1', function() {
ok($ele2.trigger('click') ....
test('action2', function() {
ok($ele1.trigger('click') ....
Rzeczywiste elementy są wewnątrz #qunit-fixture
który jest resetuj i ponownie analizuj dla każdego testu, dlatego zdarzenia kliknięcia, które wystrzeliłeś z testów, zostały uruchomione na elementach, które nie są już w wersji document
. Zamiast tego elementy te zostały odłączone i zostały ponownie przetworzone z oryginalnego tekstu HTML, tworząc w ten sposób nowe elementy DOM.
Mam rozwidlony swoją jsFiddle i poprawione to odpowiednio: http://jsfiddle.net/aZRK7/15/
Choć oczyścić różne części zanim zauważył, zasadniczą zmianą jest przeniesienie kwerendy dla elementu do wewnątrz testu:
test('foo', function() {
var $foo = $('#ele1');
ok($foo.trigger('click') ....
test('bar', function() {
var $bar = $('#bar');
ok($bar.trigger('click') ....
Co robi drugi test? Nie jestem pewien, co robi funkcja "kliknij" bez żadnych argumentów. –
sama funkcja kliknięcia bez argumentów "trigger" to kliknięcie – adardesign
Bardzo dziwne. Uaktualniłem dwa razy, aby uwzględnić te dwa testy i uczyniłem je asynchronicznymi z przypadkowymi pauzami, ale tylko jeden test został uruchomiony. To tak, jakby kliknięcie/spust rzuciło się po pierwszym. http://jsfiddle.net/bAbNd/1/. –