Мне нужно протестировать этот фильтр с помощью Jest. любая помощь? мой код выглядит следующим образом:

import Vue from "vue";

Vue.filter("truncate", (text, length, clamp) => {
    text = text || "";
    clamp = clamp || "...";
    length = length || 30;

    if (text.length <= length) return text;

    let tcText = text.slice(0, length - clamp.length);
    let last = tcText.length - 1;

    while (last > 0 && tcText[last] !== " " && tcText[last] !== clamp[0])
        last -= 1;

    // Fix for case when text dont have any `space`   last = last || length - clamp.length;
    tcText = tcText.slice(0, last);
    return tcText + clamp;
});
0
user10441050 23 Окт 2018 в 14:51

2 ответа

Лучший ответ

Поскольку вы используете глобальный фильтр, вы можете использовать отдельную функцию и легко импортировать ее в свой тест.

Сначала разделите фильтр:

export const truncate = (text, length, clamp) => {
  text = text || "";
  clamp = clamp || "...";
  length = length || 30;

  if (text.length <= length) return text;

  let tcText = text.slice(0, length - clamp.length);
  let last = tcText.length - 1;

  while (last > 0 && tcText[last] !== " " && tcText[last] !== clamp[0])
    last -= 1;

  // Fix for case when text dont have any `space`   last = last || length - clamp.length;

  tcText = tcText.slice(0, last);

  return tcText + clamp;
};

Vue.filter("truncate", truncate);

Затем импортируйте и используйте эту функцию в своем тесте, например. грамм.:

import { truncate } from '../filters.js';

describe("filter") { 
  it("truncates the text") {
    expect(truncate("your text", 5, "your clamp")).toEqual("expected")
  }
}
0
Bennett Dams 23 Окт 2018 в 12:07

Вот как я

Truncate.js

import Vue from 'vue'

export const truncate = (text, length, clamp) => {
  text = text || "";
  clamp = clamp || "...";
  length = length || 30;

  if (text.length <= length) return text;

  let tcText = text.slice(0, length - clamp.length);
  let last = tcText.length - 1;

  while (last > 0 && tcText[last] !== " " && tcText[last] !== clamp[0])
    last -= 1;

  // Fix for case when text dont have any `space`   last = last || length - clamp.length;

  tcText = tcText.slice(0, last);

  return tcText + clamp;
};

Vue.filter("truncate", truncate);

И вот тестовый код:

import Vue from 'vue'
import { truncate } from '@/filters/truncate.js'

describe("truncate",() =>{
  it("truncates the text", ()=> {
    expect(truncate("putSomeTextHere", 5, "...")).toEqual("pu...");
   });
  });
0
Rizk Meriouli 25 Окт 2018 в 19:44
52948406