import { expect } from "chai";
// 类型判断
expect('test').to.be.a('string');
expect({ foo: 'bar' }).to.be.an('object');
expect(null).to.be.null; // 确认值为 null
expect(undefined).to.be.undefined; // 确认为undefined
expect(foo).to.exist; // 确认值存在(不是 null 或 undefined)
// 相等和引用
expect(42).to.equal(42); // 严格相等(===)
expect(42).to.not.equal('42'); // 严格不相等(!==)
expect({ foo: 'bar' }).to.eql({ foo: 'bar' }); // 深度相等
expect(foo).to.be.ok; // truthy 值
// 长度和大小
expect([1, 2, 3]).to.have.lengthOf(3); // 数组或字符串长度
expect('footer').to.have.lengthOf(6);
expect([1, 2, 3]).to.have.members([2, 1, 3]); // 集合成员
// 属性和键
expect({ foo: 'bar' }).to.have.property('foo'); // 对象属性存在
expect({ foo: 'bar' }).to.have.property('foo', 'bar'); // 对象具有属性,且该属性的值为指定的值
expect({ foo: 'bar', baz: 'qux' }).to.include.keys('foo', 'baz'); // 对象包含键
// 字符串包含
expect('foobar').to.include('foo'); // 字符串包含
expect('foobar').to.match(/^foo/); // 符合正则表达式
// 数组和对象包含
expect([1, 2, 3]).to.include(2); // 数组包含项
expect({ foo: 'bar', baz: 'qux' }).to.include({ foo: 'bar' }); // 对象包含属性
// 异常处理
expect(fn).to.throw(); // 函数抛出任何异常
expect(fn).to.throw(Error); // 函数抛出特定的异常
expect(fn).to.throw('specific message'); // 函数抛出具有特定消息的异常