最简指令驱动前端框架 DaggerJS 初体验

一直想找一个超轻量级前端框架,今天发现了DaggerJS框架。

如DaggerJS官方, 所讲:DaggerJs是一个指令驱动开发框架(DDD),指令是用户代码执行的唯一入口。如果把页面看做是一辆汽车,那么dagger.js相当于车辆的发动机,指令则是遍布车身底盘的传动齿轮。

看了一下官方文档,发现组件实现官网介绍的不是太清楚,就有了今天的笔记,实现了一下单页面组件开发,效果如下:
在这里插入图片描述

体验入口

开发步骤:

  1. 安装:引用包就好,不用编译。
  <script type="module" crossorigin="anonymous" src="https://cdn.jsdelivr.net/npm/@peakman/dagger.js@0.9.13/dagger.release.js" defer></script><!-- dagger.js script -->
  1. 配置:
    这里配置了两个组件,一个模板组件,一个脚本组件
 <script type="dagger/configs">
    {
      "card": "#template1",
      "script2": {
        "uri": "#script1",
        "anonymous": false
      }
    }
  </script>
  1. 脚本组件
<script id="script1" type="dagger/script">
  export const loading = () => ({
    width: 0,
    height: 0,
    mouseX: 0,
    mouseY: 0,
    mousePX: 0,
    mousePY: 0,
    mouseLeaveDelay: null
  });
  
  export const loaded = ($scope, $node) => {
    return Promise.resolve().then(() => {
      $scope.width = $node.offsetWidth;
      $scope.height = $node.offsetHeight;
    });
  };
  
  export const styleUpdater = (mousePX, mousePY, $scope) => {
    return {
      transform: `translateX(${$scope.mousePX * -40}px) translateY(${
        $scope.mousePY * -40
      }px)`,
      "background-image": `url(${$scope.dataImage})`
    };
  };
  
  export const handleMouseMove = ($scope, $event, $node) => {
    $scope.mouseX = $event.pageX - $node.offsetLeft - $scope.width / 2;
    $scope.mouseY = $event.pageY - $node.offsetTop - $scope.height / 2;
  };
  
  export const handleMouseEnter = ($scope) => {
    clearTimeout($scope.mouseLeaveDelay);
  };
  
  export const handleMouseLeave = ($scope) => {
    $scope.mouseLeaveDelay = setTimeout(() => {
      $scope.mouseX = 0;
      $scope.mouseY = 0;
    }, 1000);
  };

</script>
  1. 模板组件
<template id="template1">
  <html>
    <div class="card-wrap" +loading="$module.script2.loading()" +loaded="$module.script2.loaded($scope, $node)" $watch="mousePX = mouseX / width, mousePY = mouseY / height" +mousemove="$module.script2.handleMouseMove($scope, $event, $node)" +mouseenter="$module.script2.handleMouseEnter($scope)" +mouseleave="$module.script2.handleMouseLeave($scope)">
        <div class="card" $style="`transform: rotateY(${ mousePX * 30 }deg) rotateX(${ mousePY * -30 }deg)`">
        <div class="card-bg" $style="$module.script2.styleUpdater(mousePX, mousePY, $scope)"></div>
        <div class="card-info">
            <h1>${ $scope.h1 }</h1>
            <p>${ $scope.p }</p>
        </div>
        </div>
    </div>
 </html>
</template>
  1. 页面
  <div id="app" class="container">
    <card +loading="{ dataImage: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2F6%2F57047aed2a0ab.jpg&refer=http%3A%2F%2Fpic1.win4000.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1666532463&t=7d555ad830675e70107946e9b2aa497b', h1: '春', p: '胜日寻芳泗水滨,无边光景一时新。' }"></card>
    <card +loading="{ dataImage: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg2.doubanio.com%2Fview%2Fgroup_topic%2Fl%2Fpublic%2Fp378200693.jpg&refer=http%3A%2F%2Fimg2.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1666532511&t=4d3b41dd7e33260f6ec15ccc5d650519', h1: '夏', p: '七八个星天外,两三点雨山前。' }"></card>
    <card +loading="{ dataImage: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fhbimg.b0.upaiyun.com%2F5f98d3ce1a123042bd9de40b3a4405f01380540a243bd-lkN4OX_fw658&refer=http%3A%2F%2Fhbimg.b0.upaiyun.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1666532563&t=dc806cd0f1af89ee9f0dcd459dd91f1e', h1: '秋', p: '照他几许人肠断,玉兔银蟾远不知。' }"></card>
    <card +loading="{ dataImage: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fblog%2F201601%2F15%2F20160115091052_wRkMa.thumb.1000_0.jpeg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1666532588&t=d4d7ab4b67da78e29be0c874301427ea', h1: '冬', p: '人烟寒橘柚,秋色老梧桐。' }"></card>
  </div>

总体来看,框架比较轻量级,上手比较快,适合超小型应用开发。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Dagger是网易杭州研究院QA团队开发的一个轻量级、运行稳定的WebUI自动化测试框架,主要基于Selenium及TestNg可以认为是对Selenium进行二次封装的一个框架(俗称 造轮子 )。之所以把这个轮子开源出来,主要在于经过了公司内部多个项目的实践,也取得了不错的成效,因此,希望开源以后可以对大家有所帮助及参考。 设计理念 Dagger首先是一个WebUI自动化框架,提供了赖以操纵浏览器的一些API。API数量不多,少于20个,但从实践上,已经基本涵盖95%的应用场景了(其余5%比较 个性 的自动化操作一般是封装在业务逻辑层面,有时候甚至会须要hack) Dagger其次是一个测试框架,使用TestNg管理和运行用例,TestNg相关断言内嵌于上述API中。因此,在我们的测试用例里面不应该看到单独的TestNg断言的 Dagger还是一种设计风格:简约。无论是Dagger框架本身还是基于Dagger编写的测试用例,都是十分light及straightforward的,以至于会让人感觉有点土。但实践中,这两者确保了低成本、易用性、可维护性 WebUI自动化从业界看,难推进,易烂尾,原因基本在于:维护成本高、运行速度慢、稳定性差 Dagger专注于WebUI自动化,从技术上克服了速度与稳定问题(见下文)。只封装够用的浏览器操作为API,并充分简化/强化这些API,以简约的风格去降低自动化的学习及使用成本。同时,在实践中,我们主要使用Dagger编写冒烟用例、其次是主干用例,少写逻辑复杂功能,不写边边角角功能,让用例也保持清爽(在整个自动化实施过程中,会定期进行用例Review),同样易于后期维护 主要特性 API极少,易于上手,详见这里. 提供比较完备的文档,便于快速入门,详见这里. 支持单机多浏览器并发执行,大大缩短用例执行时间,详见这里 通过修改TestNg源码实现失败用例自动重运行(详见这里)由此几乎消除WebUI自动化中常见的虚假失败 默认使用Chrome浏览器,原因详见这里 失败用例自动截屏 后续工作 加入Flex/Flash自动化支持 如何使用 Dagger十分适合中小型团队从零开始WebUI自动化,这样的话,只须要直接下载整个Dagger代码就行了,Dagger本身都已经配置好了,下载后看一下使用文档就可以直接开始写用例了 也可以把Dagger打成Jar包,导入已有的自动化框架中,详见这里 标签:Dagger  自动化测试

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值