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'); // 函数抛出具有特定消息的异常