用玩笑测试一个简单的功能

时间:2019-10-17 21:46:01

标签: jestjs

我想用Jest测试一个简单的功能:

// src > filterByTerm.js
function filterByTerm(inputArr, searchTerm) {
    if (!searchTerm) throw Error("searchTerm cannot be empty");
    if (!inputArr.length) throw Error("inputArr cannot be empty"); // new line

    const regex = new RegExp(searchTerm, "i");
    return inputArr.filter(function(arrayElement) {
      return arrayElement.url.match(regex);
    });
 }
 module.exports = filterByTerm;

 // filterByTerm.spec.js

const filterByTerm = require("../src/filterByTerm");

describe("Filter function", () => {

   test("it should output error", () => {
        const input = [
          { id: 1, url: "https://www.url1.dev" },
          { id: 2, url: "https://www.url2.dev" },
          { id: 3, url: "https://www.link3.dev" }
        ];
        expect(filterByTerm(input, "")).toThrowError();
      });
 });

我的问题是,为什么这个测试没有通过?如何从Jest中捕获错误?

谢谢

3 个答案:

答案 0 :(得分:1)

尝试将您的期望函数包装在另一个函数调用中:

代替:

Error: This expression has type unit but an expression was expected of type 'a list

试试:

expect(filterByTerm(input, "")).toThrowError(errorMessage);

其中 errorMessage 是您抛出的任何错误。

答案 1 :(得分:0)

我相信您应该

if (!searchTerm) throw new Error("searchTerm cannot be empty");

expect(filterByTerm(input, "")).toThrowError("searchTerm cannot be empty");

您可以进一步阅读here

答案 2 :(得分:0)

您需要更改功能,所以尝试这样的事情;

const output = [{id: 3, url: "https://www.link3.dev"}]; expect(() => { input(''); }).toThrow(Error);

并为此更改功能;

if (!searchTerm) throw Error("searchTerm cannot be empty");


if (!inputArr.length) throw Error("inputArr cannot be empty");