Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.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
哪里可以使用Jasmine Matchers进行JavaScript测试_Javascript_Jasmine_Karma Jasmine - Fatal编程技术网

哪里可以使用Jasmine Matchers进行JavaScript测试

哪里可以使用Jasmine Matchers进行JavaScript测试,javascript,jasmine,karma-jasmine,Javascript,Jasmine,Karma Jasmine,我曾尝试使用Jasmine Matchers,它确实为我提供了有关错误消息的详细信息。单元测试也变得有意义,但当涉及到分布式和大规模项目时,我不确定匹配器如何发挥好作用 下面是一个示例脚本的matcher示例 beforeEach(function () { jasmine.addMatchers({ toBeAGoodInvestment: toBeAGoodInvestment }); }); function toBeAGoodInvestment() {

我曾尝试使用Jasmine Matchers,它确实为我提供了有关错误消息的详细信息。单元测试也变得有意义,但当涉及到分布式和大规模项目时,我不确定匹配器如何发挥好作用

下面是一个示例脚本的matcher示例

beforeEach(function () {
    jasmine.addMatchers({
        toBeAGoodInvestment: toBeAGoodInvestment
    });
});

function toBeAGoodInvestment() {
    return {
        compare: function (actual, expected) {
            // Matcher Definition
            var result = {};
            result.pass = actual.isGood();

            if (actual.isGood()) {
                result.message = 'Expected investment to be a bad investment';
            } else {
                result.message = 'Expected investment to be a good investment';
            }

            return result;
        }
    }
}
规范文件如下所示

describe('Investment', function () {
   var stock, investment;
   beforeEach(function () {
      stock = new Stock();
      investment = new Investment({
         stock: stock,
         shares: 100,
         sharePrice: 20
      });
   });

   it('should be of a stock', function () {
      expect(investment.stock).toBe(stock);
   });

   it('should have invested shares quantity', function () {
      expect(investment.shares).toBe(100)
   });

   it('should have the share paid price', function () {
      expect(investment.sharePrice).toBe(20);
   });

   it('should have a cost', function () {
      expect(investment.cost).toBe(2000)
   });

   describe('when its stock share price valorizes', function () {
      beforeEach(function () {
         stock.sharePrice = 40;
      });

      it('should have a positive roi', function () {
         expect(investment.roi()).toEqual(1);
      });

      it('should be a good investment', function () {
         expect(investment.isGood()).toEqual(true);
      });

      it('matcher: should be a good investment', function () {
         expect(investment).toBeAGoodInvestment();
      });
   });
});

我添加了默认的Jasmine matchers单元测试用例和自定义matcher。我不确定这对一个更大的项目有什么帮助。如果在如何使用这些匹配器背后有任何原则指导,那就太好了

我不认为项目的规模与编写定制Jasmine匹配器的有用性之间存在直接而明确的关联

引入定制Jasmine matchers可以对测试代码的质量、可读性和紧凑性产生多方面的积极影响,而不管代码库的大小:

  • 为公共断言检查创建自定义匹配器有助于不违反
  • 它也是一种重构方法
尽管作者有责任让匹配者在断言错误发生时提供清晰易懂的反馈。我不确定在你的案例中“好”和“坏”的投资规则有多清晰,但是,乍一看,我想说的错误如下:

预期投资将是一项良好的投资

不够清晰-将其与a进行比较,例如:

预期投资将是一项良好的投资。共享价格低于配置的最低价格(30)

换句话说,当它失败时,提供尽可能多的信息,告诉一切



另一个经常被忽略的点是,定制匹配器应该引入任何副作用或更改断言下的对象。这可能会导致难以调试的意外情况。

我认为项目的规模与编写定制Jasmine matchers的实用性之间没有直接而明确的关联

引入定制Jasmine matchers可以对测试代码的质量、可读性和紧凑性产生多方面的积极影响,而不管代码库的大小:

  • 为公共断言检查创建自定义匹配器有助于不违反
  • 它也是一种重构方法
尽管作者有责任让匹配者在断言错误发生时提供清晰易懂的反馈。我不确定在你的案例中“好”和“坏”的投资规则有多清晰,但是,乍一看,我想说的错误如下:

预期投资将是一项良好的投资

不够清晰-将其与a进行比较,例如:

预期投资将是一项良好的投资。共享价格低于配置的最低价格(30)

换句话说,当它失败时,提供尽可能多的信息,告诉一切


另一个经常被忽略的点是,定制匹配器应该引入任何副作用或更改断言下的对象。这可能会导致难以调试的意外情况