我已经为GraphQL突变构建了一个测试用例,我将graphene.Decimal()类型的输入(priceOne和priceTwo)保存到models.DecimalField类型的model MyObj字段中,并在响应中返回MyObj
下面的代码返回OK,在我的机器上测试成功,让我们调用机器A,它也在机器B上工作,但在机器C上不工作
石墨烯-GraphQL
graphene==2.1.8
graphene-django==2.13.0
graphql-core==2.3.2
graphql-relay==2.0.1
import json
from graphene_django.utils import GraphQLTestCase
from mixer.backend.django import mixer
from core.schema import schema
from my_app.models import MyObj
MY_MUTATION = '''
mutation MyMutation($input: MyInput!) {
myMutation(input: $input) {
success
myObj {
id
price
}
}
}
'''
class TestMyMutation(GraphQLTestCase):
GRAPHQL_SCHEMA = schema
def setUp(self):
self.my_obj = mixer.blend(MyObj)
self.input_data = {
'id': self.my_obj.id,
'priceOne': '2000.00',
'priceTwo': '0.10',
}
def test_my_mutation_success(self):
response = self.query(MY_MUTATION, input_data=self.input_data)
content = json.loads(response.content)
self.assertResponseNoErrors(response)
self.assertTrue(content['data']['myMutation']['success'])
self.assertEqual(content['data']['myMutation']['myObj']['priceOne'], 2000.00)
self.assertEqual(content['data']['myMutation']['myObj']['priceTwo'], 0.10)
在机器C上,左参数为字符串:
self.assertEqual(content['data']['myMutation']['myObj']['priceTwo'], 0.10) AssertionError: '0.10'!= 0.1
但在机器A上,它是浮动的:
print(type(content['data']['myMutation']['myObj']['priceOne'])) <class 'float'>
我们通过将assertEqual的两个参数都转换为Decimal并将“”添加到右侧的参数中,解决了这个问题。加上一个0.10检查的量化左参数
self.assertEqual(Decimal(content['data']['myMutation']['myObj']['priceOne']), Decimal('2000.00'))
self.assertEqual(Decimal(content['data']['myMutation']['myObj']['priceTwo']).quantize(Decimal(10)**(-2)), Decimal('0.10'))
问题: 为什么第一个选项不适用于机器C,但适用于其他两个
目前没有回答
相关问题 更多 >
编程相关推荐