11import { bind } from '../lib/bind.js'
22
33describe ( 'bind' , ( ) => {
4- class FakeElement {
5- addEventListener ( ) { }
6- getAttribute ( ) { }
7- closest ( ) { }
8- }
9- class MyController {
10- get tagName ( ) {
11- return 'my-controller'
12- }
13- querySelectorAll ( ) { }
14- foo ( ) { }
15- matches ( ) { }
16- }
4+ window . customElements . define ( 'bind-test-element' , class extends HTMLElement { } )
175
186 it ( 'queries for Elements matching data-action*="tagname"' , ( ) => {
19- const instance = new MyController ( )
7+ const instance = document . createElement ( 'bind-test-element' )
208 chai . spy . on ( instance , 'querySelectorAll' , ( ) => [ ] )
219 bind ( instance )
22- expect ( instance . querySelectorAll ) . to . have . been . called . once . with . exactly ( '[data-action*=":my-controller #"]' )
10+ expect ( instance . querySelectorAll ) . to . have . been . called . once . with . exactly ( '[data-action*=":bind-test-element #"]' )
2311 } )
2412
2513 it ( 'binds events on elements based on their data-action attribute' , ( ) => {
26- const instance = new MyController ( )
14+ const instance = document . createElement ( 'bind-test-element' )
2715 chai . spy . on ( instance , 'foo' )
28- const el = new FakeElement ( )
16+ const el = document . createElement ( 'div' )
2917 instance . querySelectorAll = ( ) => [ el ]
3018 el . closest = ( ) => instance
31- el . getAttribute = ( ) => 'click:my-controller #foo'
19+ el . getAttribute = ( ) => 'click:bind-test-element #foo'
3220 chai . spy . on ( el , 'addEventListener' )
3321 bind ( instance )
3422 expect ( el . addEventListener ) . to . have . been . called . once . with ( 'click' )
@@ -40,12 +28,12 @@ describe('bind', () => {
4028 } )
4129
4230 it ( 'allows for the presence of `:` in an event name' , ( ) => {
43- const instance = new MyController ( )
31+ const instance = document . createElement ( 'bind-test-element' )
4432 chai . spy . on ( instance , 'foo' )
45- const el = new FakeElement ( )
33+ const el = document . createElement ( 'div' )
4634 instance . querySelectorAll = ( ) => [ el ]
4735 el . closest = ( ) => instance
48- el . getAttribute = ( ) => 'custom:event:my-controller #foo'
36+ el . getAttribute = ( ) => 'custom:event:bind-test-element #foo'
4937 chai . spy . on ( el , 'addEventListener' )
5038 bind ( instance )
5139 expect ( el . addEventListener ) . to . have . been . called . once . with ( 'custom:event' )
@@ -57,10 +45,10 @@ describe('bind', () => {
5745 } )
5846
5947 it ( 'binds events on the controller to itself' , ( ) => {
60- const instance = new MyController ( )
48+ const instance = document . createElement ( 'bind-test-element' )
6149 chai . spy . on ( instance , 'foo' )
6250 instance . matches = ( ) => true
63- instance . getAttribute = ( ) => 'click:my-controller #foo'
51+ instance . getAttribute = ( ) => 'click:bind-test-element #foo'
6452 instance . addEventListener = ( ) => true
6553 instance . querySelectorAll = ( ) => [ ]
6654 chai . spy . on ( instance , 'addEventListener' )
@@ -74,21 +62,21 @@ describe('bind', () => {
7462 } )
7563
7664 it ( 'does not bind elements whose closest selector is not this controller' , ( ) => {
77- const instance = new MyController ( )
65+ const instance = document . createElement ( 'bind-test-element' )
7866 chai . spy . on ( instance , 'foo' )
79- const el = new FakeElement ( )
67+ const el = document . createElement ( 'div' )
8068 instance . querySelectorAll = ( ) => [ el ]
8169 el . closest = ( ) => null
82- el . getAttribute = ( ) => 'click:my-controller #foo'
70+ el . getAttribute = ( ) => 'click:bind-test-element #foo'
8371 chai . spy . on ( el , 'addEventListener' )
8472 bind ( instance )
8573 expect ( el . addEventListener ) . to . have . not . been . called ( )
8674 } )
8775
8876 it ( 'does not bind elements whose data-action does not match controller tagname' , ( ) => {
89- const instance = new MyController ( )
77+ const instance = document . createElement ( 'bind-test-element' )
9078 chai . spy . on ( instance , 'foo' )
91- const el = new FakeElement ( )
79+ const el = document . createElement ( 'div' )
9280 instance . querySelectorAll = ( ) => [ el ]
9381 el . closest = ( ) => null
9482 el . getAttribute = ( ) => 'click:other-controller#foo'
@@ -98,24 +86,24 @@ describe('bind', () => {
9886 } )
9987
10088 it ( 'does not bind methods that dont exist' , ( ) => {
101- const instance = new MyController ( )
89+ const instance = document . createElement ( 'bind-test-element' )
10290 chai . spy . on ( instance , 'foo' )
103- const el = new FakeElement ( )
91+ const el = document . createElement ( 'div' )
10492 instance . querySelectorAll = ( ) => [ el ]
10593 el . closest = ( ) => instance
106- el . getAttribute = ( ) => 'click:my-controller #frob'
94+ el . getAttribute = ( ) => 'click:bind-test-element #frob'
10795 chai . spy . on ( el , 'addEventListener' )
10896 bind ( instance )
10997 expect ( el . addEventListener ) . to . have . not . been . called ( )
11098 } )
11199
112100 it ( 'can bind multiple event types' , ( ) => {
113- const instance = new MyController ( )
101+ const instance = document . createElement ( 'bind-test-element' )
114102 chai . spy . on ( instance , 'foo' )
115- const el = new FakeElement ( )
103+ const el = document . createElement ( 'div' )
116104 instance . querySelectorAll = ( ) => [ el ]
117105 el . closest = ( ) => instance
118- el . getAttribute = ( ) => 'click:my-controller #foo submit:my-controller #foo'
106+ el . getAttribute = ( ) => 'click:bind-test-element #foo submit:bind-test-element #foo'
119107 chai . spy . on ( el , 'addEventListener' )
120108 bind ( instance )
121109 expect ( el . addEventListener ) . to . have . been . called ( 2 )
@@ -130,15 +118,15 @@ describe('bind', () => {
130118 } )
131119
132120 it ( 'can bind multiple elements to the same event' , ( ) => {
133- const instance = new MyController ( )
121+ const instance = document . createElement ( 'bind-test-element' )
134122 chai . spy . on ( instance , 'foo' )
135- const el1 = new FakeElement ( )
136- const el2 = new FakeElement ( )
123+ const el1 = document . createElement ( 'div' )
124+ const el2 = document . createElement ( 'div' )
137125 instance . querySelectorAll = ( ) => [ el1 , el2 ]
138126 el1 . closest = ( ) => instance
139127 el2 . closest = ( ) => instance
140- el1 . getAttribute = ( ) => 'click:my-controller #foo'
141- el2 . getAttribute = ( ) => 'submit:my-controller #foo'
128+ el1 . getAttribute = ( ) => 'click:bind-test-element #foo'
129+ el2 . getAttribute = ( ) => 'submit:bind-test-element #foo'
142130 chai . spy . on ( el1 , 'addEventListener' )
143131 chai . spy . on ( el2 , 'addEventListener' )
144132 bind ( instance )
0 commit comments