Bagaimana cara menguji beberapa JavaScript yang dipanggil dengan argumen yang benar di GWT?

Saya telah membuat GWT Wrapper tipis di sekitar API JavaScript yang ada. JavaScript API diuji secara independen, jadi yang ingin saya lakukan hanyalah menguji apakah GWT Wrapper memanggil fungsi JavaScript yang benar dengan argumen yang benar. Adakah ide tentang cara melakukan ini?

Saat ini, GWT API memiliki banyak metode publik yang setelah sedikit pemrosesan memanggil metode asli pribadi yang membuat panggilan JavaScript API.

Setiap bimbingan dihargai, terima kasih.


person Supertux    schedule 21.09.2009    source sumber


Jawaban (2)


Di dunia java, apa yang Anda minta biasanya dilakukan dengan menggunakan delegasi dan antarmuka.

Saya akan membuat antarmuka (java) yang sesuai dengan API yang dimiliki perpustakaan js, dan kemudian membuat implementasi sederhana dari antarmuka itu.

Kode pembungkus Anda kemudian membungkus antarmuka. Selama waktu pengujian, Anda mengganti implementasi antarmuka tersebut dengan implementasi Anda sendiri, di mana setiap metode hanya menegaskan apakah metode tersebut dipanggil atau tidak.

E.g.

custom.lib.js has these exported methods/objects:
var exports = { 
   method1: function(i) {...}, 
   method2: function() {...},
   ...etc
}

your custom interface:
public interface CustomLib {
   String method1(int i);
   void method2();
   //...etc etc
}

your simple impl of CustomLib:
public class CustomLibImpl implements CustomLib {
   public CustomLibImpl() {
      initJS();
   }
   private native void initJS()/*-{ 
      //...init the custom lib here, e.g.
      $wnd.YOUR_NAME_SPACE.customlib = CUSTOMLIB.newObject("blah", 123, "fake");
   }-*/;
   public native String method1(int i)/*-{
      return $wnd.YOUR_NAME_SPACE.customlib.method1(i);
   }-*/;
   void method2()/*-{
      $wnd.YOUR_NAME_SPACE.customlib.method2();
   }-*/;
   //...etc etc
}

then in your Wrapper class:
public class Wrapper {
   private CustomLib customLib;
   public Wrapper(CustomLib  customLib ) {
      this.customLib = customLib;
   }

   public String yourAPIMethod1(int i) {
      return customLib.method1(i);
   }
   ///etc for method2()
}


your test:
public class YourCustomWrapperTest {
   Wrapper wrapper;
   public void setup() {
      wrapper = new Wrapper(new CustomLib() {
         //a new impl that just do asserts, no jsni, no logic.
         public String method1(int i) {assertCalledWith(i);}
         public void method2() {assertNeverCalledTwice();}
         //etc with other methods
      });
   }
   public void testSomething() { wrapper.yourAPIMethod1(1);}
}
person Chii    schedule 21.09.2009

Cara terbaik untuk menentukan apakah suatu fungsi telah diaktifkan adalah dengan membuat fungsi menulis ke penutupan dan kemudian menguji nilai penutupannya. Karena penutupan adalah variabel, Anda dapat mendefinisikannya sebagai argumen fungsi, tetapi definisi tersebut harus terjadi pada fungsi induk.

person Community    schedule 21.09.2009