什么 symbol/token 集表示 javascript 中不为 null 或未定义的所有内容?
What symbol/token set represents everything that is not null or undefined in javascript?
我正在为效用函数编写单元测试:
export const isDefined: Function = (value: any): boolean => {
return !(value == null);
};
所以我想验证 Javascript 中所有为真值是否返回真值。是否有一组我可以使用的代表所有这些值的值?目前我正在使用集合 [{}, "", 1]
现在测试是这样的:
import { isDefined } from "utilities/utilities";
import { expect } from "chai";
import "mocha";
describe("isDefined", () => {
it("should return false for undefined or null arguments", () => {
expect(isDefined(undefined)).to.be.false;
expect(isDefined(null)).to.be.false;
});
it("should return true for non null or undefined arguments", () => {
expect(isDefined({})).to.be.true;
expect(isDefined("")).to.be.true;
expect(isDefined(1)).to.be.true;
});
});
更新
中带有类型保护的函数实现
export function isDefined<T>(value: T | null | undefined): value is T {
return value != null
}
怎么样:
export const isDefined: Function = (value: any): boolean => {
return !!value;
};
或者如果这太神奇了:
export const isDefined: Function = (value: any): boolean => {
return value == true;
};
这也能满足您的测试,但可能不是您在问题中的定义。
export const isDefined: Function = (value: any): boolean => {
return value !== undefined && value !== null;
};
这是我希望函数执行的操作,基于它的名称:
export const isDefined: Function = (value: any): boolean => {
return value !== undefined;
};
编辑
来自信誉良好的来源 (MDN) 的虚假和真实测试用例:
这是官方的 ecmascript 源代码:
根据我的意见,我会这样写你想要的功能:
function isUndefined(value) {
return typeof value === 'undefined';
}
function isDefined(value) {
return !isUndefined(value);
}
我会留给你翻译成 es6。
就您关于定义值集的原始问题而言,您关于测试 1 的建议是正确的,而不用担心整数集的其余部分。
在 TDD 中,这通常称为等价分区。您真正的目标是在等价分区的边界上进行测试,因为这是容易出现错误的地方。至少对于数字的另一个好的测试是 -1,因为它位于 0 边界的另一侧。
就您的测试而言,您真的应该尝试确保每个测试有一个断言或至少有一个逻辑断言,即所有 expect 语句都在测试被测方法被调用后的预期状态。我在你的测试中看到你在每个测试中测试了一些真实的和一些虚假的东西。您的测试名称可能更清晰,并且测试可能是测试名称给出的意图的更好示例。其他要测试 isDefined 的东西包括数组、字符串、对象 属性。我脑子里想不出其他任何事情。
我正在为效用函数编写单元测试:
export const isDefined: Function = (value: any): boolean => {
return !(value == null);
};
所以我想验证 Javascript 中所有为真值是否返回真值。是否有一组我可以使用的代表所有这些值的值?目前我正在使用集合 [{}, "", 1]
现在测试是这样的:
import { isDefined } from "utilities/utilities";
import { expect } from "chai";
import "mocha";
describe("isDefined", () => {
it("should return false for undefined or null arguments", () => {
expect(isDefined(undefined)).to.be.false;
expect(isDefined(null)).to.be.false;
});
it("should return true for non null or undefined arguments", () => {
expect(isDefined({})).to.be.true;
expect(isDefined("")).to.be.true;
expect(isDefined(1)).to.be.true;
});
});
更新
export function isDefined<T>(value: T | null | undefined): value is T {
return value != null
}
怎么样:
export const isDefined: Function = (value: any): boolean => {
return !!value;
};
或者如果这太神奇了:
export const isDefined: Function = (value: any): boolean => {
return value == true;
};
这也能满足您的测试,但可能不是您在问题中的定义。
export const isDefined: Function = (value: any): boolean => {
return value !== undefined && value !== null;
};
这是我希望函数执行的操作,基于它的名称:
export const isDefined: Function = (value: any): boolean => {
return value !== undefined;
};
编辑
来自信誉良好的来源 (MDN) 的虚假和真实测试用例:
这是官方的 ecmascript 源代码:
根据我的意见,我会这样写你想要的功能:
function isUndefined(value) {
return typeof value === 'undefined';
}
function isDefined(value) {
return !isUndefined(value);
}
我会留给你翻译成 es6。
就您关于定义值集的原始问题而言,您关于测试 1 的建议是正确的,而不用担心整数集的其余部分。
在 TDD 中,这通常称为等价分区。您真正的目标是在等价分区的边界上进行测试,因为这是容易出现错误的地方。至少对于数字的另一个好的测试是 -1,因为它位于 0 边界的另一侧。
就您的测试而言,您真的应该尝试确保每个测试有一个断言或至少有一个逻辑断言,即所有 expect 语句都在测试被测方法被调用后的预期状态。我在你的测试中看到你在每个测试中测试了一些真实的和一些虚假的东西。您的测试名称可能更清晰,并且测试可能是测试名称给出的意图的更好示例。其他要测试 isDefined 的东西包括数组、字符串、对象 属性。我脑子里想不出其他任何事情。