Helpex - Trao đổi & giúp đỡ Đăng nhập
2

Tôi có một phương thức tĩnh bên trong Thành phần React, như:

class DeliveryAddressScreen extends Component {
  static isAddressReady(address) {
    return !!(address)
  }

  sendAddress(address) {
    if(this.isAddressReady(address)) {
     // DO SOMETHING
    }

  }
}

Và bài kiểm tra của tôi:

  it('sample tests', () => {
    const component = shallow(<DeliveryAddressScreen />)
    component.instance().sendAddress('Address')
    expect(true).toBe(true) // Just a sample
  })

phản hồi là:

TypeError : this.isAddressReady không phải là một hàm

Có cách nào đúng để chế giễu phương pháp này hay điều gì đó tương tự không?

2 hữu ích 2 bình luận 2.3k xem chia sẻ
2

Một phương thức tĩnh nên được gọi với tên lớp.

class DeliveryAddressScreen extends React.Component {
  static isAddressReady(address) {
    return !!(address)
  }

  sendAddress(address) {
    if(DeliveryAddressScreen.isAddressReady(address)) {
        console.log(address)
    }
  }
}

const subject = new DeliveryAddressScreen()
subject.sendAddress("test")
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
Mở rộng đoạn mã

2 hữu ích 0 bình luận chia sẻ
1
Static properties are properties of a class, not of an instance of a class.

Như đã nói từ Hiểu tĩnh trong JavaScript

Do đó bạn không cần phải gọi là nông cạn. Bạn có thể đơn giản

import DeliveryAddressScreen from '../some/path'
it('can call class method', () => {
    expect(DeliveryAddressScreen. isAddressReady).toEqual(true)
})

Tuy nhiên !!, bạn đang cố sử dụng thisbên trong thứ gì đó chưa được khởi tạo và do đó điều này sẽ không tồn tại

Thay vào đó, bạn có thể viết lại phương thức tĩnh của mình để trông giống như thế này mà không có từ khóa tĩnh

isAddressReady = (address) => {
    return true // or false
 }
1 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ javascript reactjs react-native jestjs , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading