javascript - 在 vue jest 中传递 propData 返回未定义

标签 javascript vue.js testing jestjs vue-test-utils

我在 vue 中的 Jest 测试文件中传递 propData,但它没有将 propData 数据设置到组件,而是给出错误无法读取未定义的云的属性,我的对象写得对吗?

我的 Jest 测试文件

import sideWeatherDetails from "@/components/sidemenu/sideWeatherDetails.vue";
import { mount, createLocalVue } from "@vue/test-utils";
import Vuex from "vuex";
window.alert = jest.fn();
const localVue = createLocalVue();
localVue.use(Vuex);
describe("check if convert temperature action is firing", () => {
  let actions;
  let store;
  beforeEach(() => {
    actions = {
      convertToFarenheit: jest.fn()
    };
    store = new Vuex.Store({
      actions
    });
  });

  it("convertToFarenheit is firing when checkbox is checked", () => {
    const propData = {
      clouds: { all: 40 },
      visibility: 2,
      main: { humidity: 40 },
      wind: { speed: 1.33 }
    };
    const wrapper = mount(sideWeatherDetails, { store, localVue, propData });
    const checkbox = wrapper.find({ ref: "convertTemp" });
    checkbox.setChecked();
    expect(actions.convertToFarenheit).toHaveBeenCalled();
  });
});

我正在测试的组件

<template>
  <div>
    <h2 class="weather-head">Weather Details</h2>
    <div class="side-info-value" v-if="data">
      <p>
        <span class="side-key data-key">Cloudy</span>
        <span class="data-value">{{ data.clouds.all }}%</span>
      </p>
    </div>
    <div class="side-info-value" v-if="data">
      <p>
        <span class="side-key data-key">Humidity</span>
        <span class="data-value">{{ data.main.humidity }}%</span>
      </p>
    </div>
    <div class="side-info-value" v-if="data">
      <p>
        <span class="side-key data-key">Visibility</span>
        <span class="data-value">{{ data.visibility / 1000 }} km</span>
      </p>
    </div>
    <div class="side-info-value" v-if="data">
      <p>
        <span class="side-key data-key">Wind</span>
        <span class="data-value">{{ data.wind.speed }} m/s</span>
      </p>
    </div>
    <div class="side-info-value">
      <p>
        <span class="side-key data-key">In Farenheit</span>
        <span class="data-value">
          <input ref="convertTemp" type="checkbox" @change="convertToFar()" />
        </span>
      </p>
    </div>
  </div>
</template>
<script>
import { mapActions } from "vuex";
export default {
  props: ["data"],
  methods: {
    convertToFar() {
      if (this.$refs.convertTemp.checked) {
        this.convertToFarenheit();
      } else {
        this.convertToCelsius();
      }
    },
    ...mapActions(["convertToFarenheit", "convertToCelsius"])
  }
};
</script>

最佳答案

错字。您需要propsData,而不是您当前拥有的propData

it("convertToFarenheit is firing when checkbox is checked", () => {
  const propsData = {
    clouds: { all: 40 },
    visibility: 2,
    main: { humidity: 40 },
    wind: { speed: 1.33 }
  };
  const wrapper = mount(sideWeatherDetails, { store, localVue, propsData });
  const checkbox = wrapper.find({ ref: "convertTemp" });
  checkbox.setChecked();
  expect(actions.convertToFarenheit).toHaveBeenCalled();
});

关于javascript - 在 vue jest 中传递 propData 返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58961103/

相关文章:

Javascript:克服标准模式差异

javascript - 如何更改V-Calendar包的输入元素的css样式?

unit-testing - 桌面应用程序和 Web 应用程序之间的区别

testing - 如何在 cabal 测试中使用 detailed-0.9

javascript - 如何从 Protractor 中的输入元素获取文本值而不是 promise

javascript - 如何在 Meteor.js 中显示我的示例列表?我做错了什么以及如何解决它?

javascript - AngularJS 隔离范围指令

vue.js - vue 中 "@update:model-value "的用途是什么以及它是如何工作的?

vue.js - 为什么 v-on 在外部模板中使用 Vue 组件时不起作用?

selenium - 测试按钮同时在浏览器的不同选项卡中单击