账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    在karma能不能测试hover触发的样式
    60
    0

    问题描述

    在karma能不能测试hover触发的样式

    问题出现的环境背景及自己尝试过哪些方法

    在vue的环境下写东西,想到karma能创建浏览器环境,一般来说样式是能供mocha之类的拿到的。用mouseenter模拟hover,这样应该能拿到hover之后的样式。但是经过以下代码实现,发现并不能:

    相关代码

    test-hover.vue文件:

    <template>
      <div class="test-hover">
        <div id="test3">测试字体hover后颜色</div>
      </div>
    </template>
    
    <script>
    export default {
      name: 'TestHover'
    }
    </script>
    
    <style lang="scss">
      .test-hover {
        #test3 {
          color: red;
          &:hover {
            color: blue;
          }
        }
      }
    </style>

    test-hover-spec.js文件:

    import chai, { expect } from 'chai'
    import { mount } from '@vue/test-utils'
    
    import TestHover from '../../src/packages/test-hover'
    
    const triggerMouseEnterEvent = function(elm) {
      const name = 'mouseenter'
      const evt = document.createEvent('MouseEvents');
    
      evt.initEvent('mouseenter');
      elm.dispatchEvent
        ? elm.dispatchEvent(evt)
        : elm.fireEvent('onmouseenter', evt);
    
      return elm;
    };
    
    
    describe('TestHover', () => {
      it('可拿到hover之后的样式', () => {
        const wrapper = mount(TestHover, {
          attachToDocument: true,
          propsData: {}
        })
        console.log(getComputedStyle(tt.element).color) // rgb(255, 0, 0)
        const test3 = document.getElementById('test3')
        const res = triggerMouseEnterEvent(test3, 'mouseenter')
        console.log(getComputedStyle(res).color) // 期望拿到rgb(0, 0, 255)
      })
    })
    

    你期待的结果是什么?

    期望的结果是在mouseenter(模拟hover)之后,下一行log打印rgb(0, 0, 255)

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 台灯很亮 普通会员 1楼

      是的,在Karma中,你可以使用HTML5的hover伪类来测试hover触发的样式。你可以创建一个简单的HTML元素,并使用:hover伪类来模拟鼠标悬停在元素上时的状态。然后,你可以使用Karma的watch功能来监控元素的状态,并在元素的hover状态发生改变时,更新你的测试结果。

      以下是一个简单的例子:

      ```javascript describe('My Test', function() { var myElement = document.getElementById('myElement'); var Karma = require('@karma-runner');

      beforeEach(function() { Karma.start(); });

      it('should have a hover state', function() { myElement.addEventListener('mouseover', function() { // 模拟鼠标悬停在元素上的状态 }); myElement.addEventListener('mouseout', function() { // 模拟鼠标移出元素上的状态 }); myElement.addEventListener('hover', function() { // 模拟元素的hover状态 });

      // 观察元素的状态变化
      expect(myElement.classList.contains('hover')).toBe(true);
      

      }); }); ```

      在这个例子中,我们首先在beforeEach函数中启动Karma。然后,我们在it函数中添加了三个事件监听器,分别模拟鼠标悬停、鼠标移出和元素的hover状态。最后,我们在测试用例中观察元素的状态变化,并使用expect函数来断言元素的hover状态。

      注意,这只是一个基本的例子,你可能需要根据你的具体需求来修改它。例如,你可能需要添加更多的事件监听器,或者改变监听器的执行顺序。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部