如何测试我的数据是不是更改? (Vue JS、Jest、单元测试)

Posted

技术标签:

【中文标题】如何测试我的数据是不是更改? (Vue JS、Jest、单元测试)【英文标题】:How do I test if my data changes? (Vue JS, Jest, Unit Testing)如何测试我的数据是否更改? (Vue JS、Jest、单元测试) 【发布时间】:2020-04-25 08:54:26 【问题描述】:

我正在我的前端 Vue JS 项目中使用 Jest 对我的代码进行单元测试,我想编写的测试之一是:

it('should show the advanced filters if user_id exists', () => 
  )

这是 javascript 代码中创建的属性的一部分:

this.user_id = localStorage.getItem("user_id");
      if (this.user_id) 
        this.renderAdvancedFilters = true;
      

此外,以下是正在导出的部分数据:

export default 
  data: () => (
    renderAdvancedFilters: false,
    user_id: localStorage.getItem("user_id"),

因此,renderAdvancedFilters 最初设置为 false,但如果用户 id 存在,则将其设置为 true,然后显示高级过滤器。我如何编写一个单元测试来显示如果用户 id 存在,那么高级过滤器会显示在应用程序上?由于这是一个创建的属性,没有与要测试的应用程序交互,所以我认为我应该只是测试数据,但我不确定如何。

我应该模拟 this.user_id 的数据吗?如果是这样,我该怎么做?

谢谢

【问题讨论】:

【参考方案1】:

我想你只需要模拟这个localStorage.getItem();

模拟它以返回一个虚拟用户 ID,然后您只需运行测试并检查结果是否符合您的预期。

似乎这是您需要模拟的唯一依赖项。

类似:

global.localStorage = 
    getItem: jest.fn(() => 'some user id')
;

【讨论】:

明白了,这很有道理。但是,我如何测试它是否存在,从而导致“renderAdvancedFilters”然后存在? 您应该测试您的模板看起来应该如何。也许通过检查是否存在仅在renderAdvancedFilters 为真时才显示的特定元素

以上是关于如何测试我的数据是不是更改? (Vue JS、Jest、单元测试)的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 中父级数据更改时如何重新渲染内部组件

JS:如何根据对象属性更改对象属性的值

vue.js est unit - 如何根据计算值测试观察者? (不推荐使用 setComputed)

如何在范围外更改 vue.js 组件数据

Vue.js - 如何在数据对象更改时向父组件发出?

如何让 DOM 呈现对 VUE.js 项目中计算数据的更改