在Laravel 5中推荐使用单元测试javascript的方法

时间:2015-07-13 11:50:08

标签: javascript unit-testing

是否有推荐的方法在Laravel 5中进行单元测试javascript?我正在使用jQuery框架来执行搜索自动完成任务(下面的代码)。我想要测试很多块,但我不确定如何最好地测试Laravel 5中的所有内容。感谢任何帮助。

$ perl -V
Summary of my perl5 (revision 5 version 14 subversion 4) configuration:

  Platform:
    osname=cygwin, osvers=1.7.35(0.28653), archname=cygwin-thread-multi
    uname='cygwin_nt-6.3 cygwin 1.7.35(0.28653) 2015-02-16 13:03 x86_64 cygwin '
    config_args='-d -e -Dprefix=/usr -Dmksymlinks -Dusethreads -Darchname=x86_64-cygwin-threads -Dlibperl=cygperl5_14.dll -Dcc=gcc -Dld=g++ -Accflags=-ggdb -O2 -pipe -Wimplicit-function-declaration -fdebug-prefix-map=/mnt/share/maint/perl.x86_64/build=/usr/src/debug/perl-5.14.4-3 -fdebug-prefix-map=/mnt/share/maint/perl.x86_64/src/perl-5.14.4=/usr/src/debug/perl-5.14.4-3 -fwrapv'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -ggdb -O2 -pipe -Wimplicit-function-declaration -fdebug-prefix-map=/mnt/share/maint/perl.x86_64/build=/usr/src/debug/perl-5.14.4-3 -fdebug-prefix-map=/mnt/share/maint/perl.x86_64/src/perl-5.14.4=/usr/src/debug/perl-5.14.4-3 -fwrapv -fno-strict-aliasing -fstack-protector',
    optimize='-O3',
    cppflags='-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -ggdb -O2 -pipe -Wimplicit-function-declaration -fdebug-prefix-map=/mnt/share/maint/perl.x86_64/build=/usr/src/debug/perl-5.14.4-3 -fdebug-prefix-map=/mnt/share/maint/perl.x86_64/src/perl-5.14.4=/usr/src/debug/perl-5.14.4-3 -fwrapv -fno-strict-aliasing -fstack-protector'
    ccversion='', gccversion='4.9.2', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='g++', ldflags =' -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /usr/lib /lib
    libs=-lgdbm -ldb -ldl -lcrypt -lgdbm_compat
    perllibs=-ldl -lcrypt
    libc=/usr/lib/libc.a, so=dll, useshrplib=true, libperl=cygperl5_14.dll
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags=' --shared  -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base -L/usr/local/lib -fstack-protector'


Characteristics of this binary (from libperl):
  Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV
                        PERL_IMPLICIT_CONTEXT PERL_PRESERVE_IVUV
                        PERL_USE_SAFE_PUTENV USE_64_BIT_ALL USE_64_BIT_INT
                        USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_PERL_ATOF
                        USE_REENTRANT_API
  Locally applied patches:
        rurban/0c612ce82        Fix building static extensions on cygwin, -UUSEIMPORTLIB
        perl.cygwin_autorebase  Rebase DLL after building (skip for cygport builds)
        v5.14.0-RC2-6-gfc6f691  skip testing cygwin utf8 readdir() with Win32 ANSI API
        v5.14.0-RC2-7-g3877b86  Fix test 50 on cygwin: \WINDOWS
        v5.14.0-RC2-10-gd22b5bd revert +x global.sym from 3691eaa79cc6a
        v5.15.0-579-g8375c93    Export store_cop_label for the perl compiler
        v5.15.3-232-g1bac5ec    sv.c: S_anonymise_cv_maybe UTF8 cleanup.
        v5.15.7-75-g803e389     CYG17 utf8 paths
        v5.15.7-302-g5bc802d    Revise perlcygwin.pod for cygwin-1.7
        v5.15.7-303-g286f819    add Cygwin::sync_winenv [perl #110190]
        v5.19.8-494-g6cc44f6    avoid a "FILE" name conflict with cygwin's wchar.h
        v5.19.8-496-g3383030    [perl #120936] op/taint.t handling of no ipcsysv on cygwin
        v5.19.8-509-g288d0d9    cygwin doesn't implement $^E (except as a read of $!)
        v5.21.4-548-g860874c    wrap the failing call_checker test in an eval and TODO it
  Built under cygwin
  Compiled at Feb 17 2015 21:41:24
  @INC:
    /usr/lib/perl5/site_perl/5.14/x86_64-cygwin-threads
    /usr/lib/perl5/site_perl/5.14
    /usr/lib/perl5/vendor_perl/5.14/x86_64-cygwin-threads
    /usr/lib/perl5/vendor_perl/5.14
    /usr/lib/perl5/5.14/x86_64-cygwin-threads
    /usr/lib/perl5/5.14
    .

1 个答案:

答案 0 :(得分:5)

Laravel(或任何其他后端框架/语言/平台)的选择完全无关紧要。这纯粹是前端代码。因此,您需要使用前端测试工具。

然而,甚至在您开始考虑对此代码进行单元测试之前,您需要进行一些重新编码,以便它实际上可以在单元中进行测试。事实上,你有一个巨大的整体代码blob,根本无法进行单元测试。您需要将功能提取到离散函数中;越短越好。

完成后,我建议您进行测试的最佳起点是QUnit。这是由jQuery基础开发的单元测试框架,用于测试jQuery本身。由于您的代码将jQuery作为依赖项,我建议这可能是最好的起点。但是,JavaScript还有许多其他测试框架,您可能也想调查其中的一些。

请记住,UI代码(大多数前端JavaScript都是如此)很难为高质量的单元测试编写代码。您可能会发现功能测试 - 即通过浏览器自动进行最终用户测试 - 将为您提供更好的服务。 (实际上,你应该考虑进行这种测试,即使你也为JS代码编写单元测试)。为此,您需要一个用于浏览器的自动化工具。最着名的是Selenium,但您可能还想查看SahiPhantomJS