使用 vue-test-util 更改 v-select 的选定选项

EFO*_*FOE 7 vuetify.js vue-test-utils

我正在尝试测试使用 vuetify 构建的组件。为此,我正在使用 vue-test-utils。我的目标是在 v-select 字段中执行更改,并断言执行了突变。这是我的代码:

<div id="app">
  <v-app id="inspire">
    <v-container fluid>
      <v-layout row wrap>
        <v-flex xs6>
          <v-subheader>Standard</v-subheader>
        </v-flex>
        <v-flex xs6>
          <v-select
            :items="items"
            v-model="e1"
            label="Select"
            single-line
          ></v-select>
        </v-flex>
      </v-layout>
    </v-container>
  </v-app>
</div>
Run Code Online (Sandbox Code Playgroud)

当我设置数据时,第一次测试没问题:

componentWrapper.setData({items: storesList})
expect(componentWrapper.vm.$data.items).toHaveLength(2)
Run Code Online (Sandbox Code Playgroud)

我现在想更改我尝试的选定值:

componentWrapper.findAll('#option').at(1).setSelected()
Run Code Online (Sandbox Code Playgroud)

并且

componentWrapper.find('el-select')
Run Code Online (Sandbox Code Playgroud)

有人可以帮我检索选择然后更改所选值吗?谢谢您的支持。

Lia*_*hou 8

使用wrapper.vm.selectItem('foo'). 这个对我有用。

我在 vuetifyv-select测试中发现了这个:

旧:~~ https://github.com/vuetifyjs/vuetify/blob/master/packages/vuetify/test/unit/components/VSelect/VSelect.spec.js#L533~~

新:https : //github.com/vuetifyjs/vuetify/blob/b2abe9fa274feeb0c5033bf12cc48276d4ac5a78/packages/vuetify/test/unit/components/VSelect/VSelect.spec.js#L28

编辑:更新链接。

  • 对于这个问题的新手,这里有一个更新的链接,因为上面已经移动:https://github.com/vuetifyjs/vuetify/blob/b2abe9fa274feeb0c5033bf12cc48276d4ac5a78/packages/vuetify/test/unit/components/VspecSelect/VSelectList. (4认同)

and*_*nix -4

我也一直在努力解决这个问题,最后找到了一种方法。我正在使用 Jest 和 vue-test-utils。基本上,您必须通过两个单独的步骤来完成。将选项标记为已选择,然后在选择上触发更改。

HTML 部分是:

      <select id="groupid" v-model="groupID">
        <option value="">-Select group-</option>
        <option v-for="g in groupList" 
          v-bind:value="g.groupId">{{g.groupId}} - {{g.groupName}}
        </option>
      </select>
Run Code Online (Sandbox Code Playgroud)

测试是:

it('should populate the subgroup list when a group is selected', () => {
  expect(cmp.vm.groupID).toBe('');
  expect(cmp.findAll('select#groupid > option').length).toBe(3);
  cmp.findAll('select#groupid > option').at(1).element.selected = true;
  cmp.find('select#groupid').trigger('change');
  expect(cmp.vm.groupID).not.toBe('');
});
Run Code Online (Sandbox Code Playgroud)

  • 降低了这个答案,因为问题是关于 Vuetify 组件 V-Select,而不是简单的 html select 元素 (6认同)
  • 但 `&lt;v-select&gt;` 不会呈现默认浏览器 &lt;select&gt; 标记。您从哪里获得“&lt;select&gt;”和“&lt;option&gt;”? (2认同)