我正在使用jasmine练习BDD,这个函数将http查询字符串转换为对象。
'a=b&c=d' -> {a: 'b', c: 'd'}
我能想出的就是:
describe('queryParser', function() {
it('should return query object', function() {
expect(parseUrl('a=b')).toEqual({
a: 'b'
});
expect(parseUrl('a=b&c=d')).toEqual({
a: 'b',
c: 'd'
});
expect(parseUrl('&a=b&c=d')).toEqual({
a: 'b',
c: 'd'
});
expect(parseUrl('a=&c=d')).toEqual({
a: '',
c: 'd'
});
expect(parseUrl('')).toEqual({});
});
});
但我认为在一个测试用例中有太多断言(期望)。如果我正在写tdd,我可以将断言分成
testOneNameValuePair
testMultipleNameValuePairs
testNoNameValuePair
但是对于BDD,我可以像should handle one name value pair case
那样写吗?这听起来微不足道。有什么建议吗?
答案 0 :(得分:1)
这真的是一种风格问题(因此意见,所以它可能不属于这里......)但我会写一些类似的东西:
it("should be an empty object when the query is empty", function() {
expect( parseUrl('') ).toEqual( {} );
});
it("should separate names from values with = sign"), function() {
expect( parseUrl('a=b') ).toEqual( { a: 'b' } );
});
it("should separate multiple pairs with & sign"), function() {
expect( parseUrl('a=b&c=d') ).toEqual( { a: 'b', c: 'd' } );
});
it("should ignore a leading & sign"), function() {
expect( parseUrl('&a=b&c=d') ).toEqual( { a: 'b', c: 'd' } );
});
it("should use empty string when a value is missing"), function() {
expect( parseUrl('a=') ).toEqual( { a: '' } );
});
我在这里要做的就是确保我的规范名称不仅描述了条件,而且还指出了我希望代码在这些条件下做的事情。
我对你写的实际断言只做了几处小改动。我把空字符串放在第一位,因为我经常使用它作为我的第一个测试。此外,在缺失值的情况下,我停止了第二对。我认为这与被测试的内容无关,而将其删除会使测试更容易阅读。不过,这些都是风格和个人品味的问题。
TL; DR:编写对您和您的同事有用的规范名称。没有其他人的意见很重要。