node.js - 即使存在匹配值,Jest/Jasmine .toContain() 也会失败

标签 node.js reactjs jasmine jestjs

我正在编写一个带有 Button 组件的简单 React 应用程序,如下所示:

import React, { Component } from 'react';
// shim to find stuff
Array.prototype.contains = function (needle) {
  for (var i = 0; i < this.length; i++) {
       if (this[i] == needle) return true;
   }
   return false;
};

class Button extends Component {
  propTypes: {
    text: React.PropTypes.string.isRequired,
    modifiers: React.PropTypes.array
  }
  render() {
    return(
      <span className={this.displayModifiers()}>{this.props.text}</span>
    );
  }
  displayModifiers() {
    const modifiers = this.props.modifiers || ["default"];
    if (modifiers.contains("default") ||
      modifiers.contains("danger")  ||
      modifiers.contains("success")) {
      // do nothing
    } else {
      // add default
      modifiers.push("defualt");
    }
    var classNames = "btn"
    for (var i = 0; i < modifiers.length; i++) {
      classNames += " btn-" + modifiers[i]
    }
    return(classNames);
  }
}

export default Button;

然后我写了这个来测试它:

it("contains the correct bootstrap classes", () => {
  expect(mount(<Button modifiers={["flat"]}/>).html()).toContain("<span class=\"btn btn-flat btn-default\"></span>");
});

该代码应该可以通过,但我收到以下错误消息:

expect(string).toContain(value)

Expected string:
  "<span class=\"btn btn-flat btn-defualt\"></span>"
To contain value:
  "<span class=\"btn btn-flat btn-default\"></span>"

  at Object.it (src\__tests__\Button.test.js:42:293)

有什么想法为什么这没有通过吗?

最佳答案

来自文档:

Use .toContain when you want to check that an item is in a list.

要测试字符串,您应该使用 toBetoEqual

it("contains the correct bootstrap classes", () => {
  expect(mount(<Button modifiers={["flat"]}/>).html()).toBe("<span class=\"btn btn-flat btn-default\"></span>");
});

但是有一种更好的方法来测试输出渲染组件:snapshots

it("contains the correct bootstrap classes", () => {
  expect(mount(<Button modifiers={["flat"]}/>).html()).toMatchSnapshot();
});

请注意,您将需要 enzymeToJson使用 enzyme 进行快照测试。

关于node.js - 即使存在匹配值,Jest/Jasmine .toContain() 也会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41916612/

相关文章:

node.js - 为什么 "npm install"会重写 package-lock.json?

node.js - OCaml/Node.JS 上的 Lwt.async 和 Lwt_main.run 有什么区别?

javascript - Node.js 与 Express : Push to an empty Array returns an empty Array

reactjs - 我可以将react.js应用程序捆绑到多个模块中吗?

javascript - 我无法在 react 中更新我的数组状态?

javascript - Jasmine angular - 模拟http请求

mysql - 在我的 sql 中通过 sequelize 原始查询搜索单值和双值时出现 sql 语法错误

javascript - $event.stopPropogation 不是 Angularjs 单元测试中的函数错误

angular - 模拟 http promise 服务时出现 `then is not a function` 错误

javascript - react -JS : Access a child's method through HOC wrapper