gpt4 book ai didi

unit-testing - Jasmine - 何时使用 toContain() 或 toMatch()?

转载 作者:行者123 更新时间:2023-12-03 18:29:31 27 4
gpt4 key购买 nike

我正在研究使用 Jasmine JS 的 TDD 和单元测试,我对他们的方法有疑问。

我找到了两种方法,想知道有什么区别。

describe('Teste do toContain', () => {
var name = 'Lucas de Brito Silva'
it('Deve demonstrar o uso do toContain', () => {
expect(name).toContain('Lucas');
});
});
describe('Teste do toMatch', function () {
var text = 'Lucas de Brito Silva'
it('deve validar o uso do toMatch', () => {
expect(text).toMatch('Brito');
});
})

最佳答案

不同之处部分在于他们操作的内容,还有他们将要做的事情。
以下是 version 2 of Jasmine 的示例用法(但它使用最新版本运行示例):

it("The 'toMatch' matcher is for regular expressions", function() {
var message = "foo bar baz";

expect(message).toMatch(/bar/);
expect(message).toMatch("bar");
expect(message).not.toMatch(/quux/);
});

describe("The 'toContain' matcher", function() {
it("works for finding an item in an Array", function() {
var a = ["foo", "bar", "baz"];

expect(a).toContain("bar");
expect(a).not.toContain("quux");
});

it("also works for finding a substring", function() {
var a = "foo bar baz";

expect(a).toContain("bar");
expect(a).not.toContain("quux");
});
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/3.4.0/jasmine.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/3.4.0/jasmine.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/3.4.0/jasmine-html.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/3.4.0/boot.min.js"></script>

它确实展示了他们可以做什么。
  • toContain 可用于数组和字符串。使用 Array#includes String#includes 本质上是相同的-如果数组或字符串具有与参数匹配的项(对于数组)或子序列(对于字符串),则将检查该数组或字符串。 expect(something).toContain(other) 大致类似于检查 something.includes(other) === true
  • toMatch 改为使用正则表达式。所以,首先,它只适用于字符串,而不适用于数组。其次,如果给定一个字符串作为参数,则从中生成一个正则表达式。因此, expect(something).toMatch(other) 实际上会像 new RegExp(other).test(something) 一样被解析。这确实意味着如果你想用它进行简单的字符串匹配,你应该小心不要使用特殊字符:

  • it("The 'toMatch' matcher generates a regex from the input", function() {
    var message = "foo\\dbar";

    expect(message).toMatch(message);
    });

    it("The generated matcher will obey regex restrictions", function() {
    var pattern = "foo\\dbar";

    expect(pattern).not.toMatch(pattern);
    expect("foo4bar").toMatch(pattern);
    });
    <link href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/3.4.0/jasmine.min.css" rel="stylesheet" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/3.4.0/jasmine.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/3.4.0/jasmine-html.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/3.4.0/boot.min.js"></script>

    在这里, message 字符串的值是 foo\dbar 但如果你从中生成一个正则表达式,那么它不会匹配相同的字符串,因为 \d 表示一个数字 - foo4bar 将匹配但不匹配 foo\dbar

    关于unit-testing - Jasmine - 何时使用 toContain() 或 toMatch()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57325448/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com