Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要一些关于如何BDD一个简单的url解析器函数的建议吗_Javascript_Tdd_Jasmine_Bdd - Fatal编程技术网

Javascript 需要一些关于如何BDD一个简单的url解析器函数的建议吗

Javascript 需要一些关于如何BDD一个简单的url解析器函数的建议吗,javascript,tdd,jasmine,bdd,Javascript,Tdd,Jasmine,Bdd,我在一个简单的函数上使用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'

我在一个简单的函数上使用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({});
    });
});
但是我认为在一个测试用例中有太多的断言(expect)。如果我在写tdd,我可以将断言分为

testOneNameValuePair
testMultipleNameValuePairs
testNoNameValuePair

但是使用BDD,我可以写一些类似于
应该处理一个名称-值对大小写的东西吗?这听起来既琐碎又奇怪。有什么建议吗?

这确实是一个风格问题(因此也是观点问题,所以可能不属于这里…),但我会写一些类似的东西:

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:写下对你和你的同事有用的规范名称。其他人的意见都无关紧要

您可以编写
“应该解析单个名称-值对”
“应该解析多个值对”
“应该解析空值”
,等等……听起来更好IMHO@Engineer听起来确实更好。似乎我可以将TDD中的
testblabla
转换为bdd中的
shoudbla
。但是对于bdd来说,它是否太细粒度了?在进行tdd时,有些测试可能非常小,有时太小而无法作为行为处理。我是否考虑过了?我读到的大多数关于测试驱动的书籍(例如Kent Beck的TDD示例)都是用TDD风格编写的,但是jasmine是javascript中最热门的测试框架,所以我总是尝试将TDD映射到bdd。有点头疼,或者…可能是@KrzysztofSafjanowski的复制品很好。看看,他们的示例测试很少使用“应该”。也许很多bdd教程都是用这种方式编写的,所以每个人都开始使用“应该”?