Kaynağa Gözat

EAGLESIX-2651: Divide: fix type check, vps in test

Kyle P Davis 11 yıl önce
ebeveyn
işleme
1b39281317

+ 1 - 1
lib/pipeline/expressions/DivideExpression.js

@@ -25,7 +25,7 @@ proto.evaluateInternal = function evaluateInternal(vars) {
 	var lhs = this.operands[0].evaluateInternal(vars),
 		rhs = this.operands[1].evaluateInternal(vars);
 
-	if (typeof lhs !== "number" && typeof rhs !== "number") {
+	if (typeof lhs === "number" && typeof rhs === "number") {
         var numer = lhs,
             denom = rhs;
         if (denom === 0) throw new Error("can't $divide by zero; uassert code 16608");

+ 8 - 5
test/lib/pipeline/expressions/DivideExpression_test.js

@@ -1,6 +1,8 @@
 "use strict";
 var assert = require("assert"),
 	DivideExpression = require("../../../../lib/pipeline/expressions/DivideExpression"),
+	VariablesIdGenerator = require("../../../../lib/pipeline/expressions/VariablesIdGenerator"),
+	VariablesParseState = require("../../../../lib/pipeline/expressions/VariablesParseState"),
 	Expression = require("../../../../lib/pipeline/expressions/Expression");
 
 // Mocha one-liner to make these tests self-hosted
@@ -33,11 +35,12 @@ exports.DivideExpression = {
 
 	"#evaluate()": {
 
-		"should return the size": function() {
-			var spec = {$divide: ["$a", "$b"]},
-				vars = {a: 6, b: 2},
-				expected = 3;
-			assert.strictEqual(Expression.parseOperand(spec).evaluate(vars), expected);
+		"should divide two numbers": function() {
+			var idGenerator = new VariablesIdGenerator(),
+				vps = new VariablesParseState(idGenerator),
+				expr = Expression.parseOperand({$divide: ["$a", "$b"]}, vps),
+				input = {a: 6, b: 2};
+			assert.strictEqual(expr.evaluate(input), 3);
 		},
 
 	},