Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.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 茉莉花规格产生不同于执行时的随机数_Javascript_Ruby On Rails_Testing_Tdd_Jasmine - Fatal编程技术网

Javascript 茉莉花规格产生不同于执行时的随机数

Javascript 茉莉花规格产生不同于执行时的随机数,javascript,ruby-on-rails,testing,tdd,jasmine,Javascript,Ruby On Rails,Testing,Tdd,Jasmine,我有一个Jasmine测试失败了,因为正在生成一个随机数,而这个随机值对于执行和规范是不同的 fetch: function(options) { if(typeof options === "undefined") { options = {}; } if(typeof options.data === "undefined") { options.data = {}; } options.data.id = this.j

我有一个Jasmine测试失败了,因为正在生成一个随机数,而这个随机值对于执行和规范是不同的

fetch: function(options) {
    if(typeof options === "undefined") {
        options = {};
    }
    if(typeof options.data === "undefined") {
        options.data = {};
    }
    options.data.id = this.journalId;
    options.data.random = Math.floor(Math.random()*10000);
    col.prototype.fetch.call(this, options);
}
下面的测试失败,因为
Math.floor(Math.random()*10000)
正在生成不同的值

it("should call parent fetch with default options", function() {
  this.collection.fetch();
  expect(this.fetchSpy).toHaveBeenCalledWith({
    data: {
      id: 1,
      random: Math.floor(Math.random()*10000) 
    }
  }); 
});

对于生成随机数的情况,是否有办法使我的测试通过?

您可以模拟
Math.random
函数。茉莉花2:

茉莉花1:

it(“应使用默认选项调用父获取”,函数(){
jasmine.spyOn(数学,“随机”).andReturn(0.1);
this.collection.fetch();
期待(这个。fetchSpy)。已经被收集({
数据:{
id:1,
随机:Math.floor(Math.random()*10000)
}
}); 
});

如果要模拟一系列“随机”值,可以使用:

spyOn(Math, 'random').and.returnValues(0.1, 0.2, 0.3, 0.4);
请注意,您必须在returnValues中添加s,否则它将不起作用

spyOn(Math, 'random').and.returnValues(0.1, 0.2, 0.3, 0.4);